Merge branch 'talk_flutter' of gitee.com:starlock-cn/app-starlock into talk_flutter
# Conflicts: # star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart # star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart # star_lock/lib/talk/udp/udp_help.dart # star_lock/lib/talk/udp/udp_talkClass.dart # star_lock/lib/tools/eventBusEventManage.dart
This commit is contained in:
commit
5f9e061ee3
@ -27,6 +27,10 @@ PODS:
|
|||||||
- AMapFoundation (1.8.2)
|
- AMapFoundation (1.8.2)
|
||||||
- AMapLocation (2.10.0):
|
- AMapLocation (2.10.0):
|
||||||
- AMapFoundation (>= 1.8.0)
|
- AMapFoundation (>= 1.8.0)
|
||||||
|
- audio_session (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- audioplayers_darwin (0.0.1):
|
||||||
|
- Flutter
|
||||||
- auto_orientation (0.0.1):
|
- auto_orientation (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- camera_avfoundation (0.0.1):
|
- camera_avfoundation (0.0.1):
|
||||||
@ -37,12 +41,18 @@ PODS:
|
|||||||
- Flutter (1.0.0)
|
- Flutter (1.0.0)
|
||||||
- flutter_native_contact_picker (0.0.1):
|
- flutter_native_contact_picker (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- flutter_sound (9.2.13):
|
||||||
|
- Flutter
|
||||||
|
- flutter_sound_core (= 9.2.13)
|
||||||
|
- flutter_sound_core (9.2.13)
|
||||||
- fluttertoast (0.0.2):
|
- fluttertoast (0.0.2):
|
||||||
- Flutter
|
- Flutter
|
||||||
- Toast
|
- Toast
|
||||||
- FMDB (2.7.5):
|
- FMDB (2.7.5):
|
||||||
- FMDB/standard (= 2.7.5)
|
- FMDB/standard (= 2.7.5)
|
||||||
- FMDB/standard (2.7.5)
|
- FMDB/standard (2.7.5)
|
||||||
|
- g711_flutter (0.0.1):
|
||||||
|
- Flutter
|
||||||
- google_maps_flutter_ios (0.0.1):
|
- google_maps_flutter_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- GoogleMaps (< 8.0)
|
- GoogleMaps (< 8.0)
|
||||||
@ -51,8 +61,12 @@ PODS:
|
|||||||
- GoogleMaps/Base (5.2.0)
|
- GoogleMaps/Base (5.2.0)
|
||||||
- GoogleMaps/Maps (5.2.0):
|
- GoogleMaps/Maps (5.2.0):
|
||||||
- GoogleMaps/Base
|
- GoogleMaps/Base
|
||||||
|
- image_gallery_saver (2.0.2):
|
||||||
|
- Flutter
|
||||||
- image_picker_ios (0.0.1):
|
- image_picker_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- just_audio (0.0.1):
|
||||||
|
- Flutter
|
||||||
- network_info_plus (0.0.1):
|
- network_info_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- package_info_plus (0.4.5):
|
- package_info_plus (0.4.5):
|
||||||
@ -62,7 +76,7 @@ PODS:
|
|||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- permission_handler_apple (9.1.1):
|
- permission_handler_apple (9.1.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- Protobuf (3.25.1)
|
- Protobuf (3.25.0)
|
||||||
- reactive_ble_mobile (0.0.1):
|
- reactive_ble_mobile (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- Protobuf (~> 3.5)
|
- Protobuf (~> 3.5)
|
||||||
@ -88,14 +102,20 @@ DEPENDENCIES:
|
|||||||
- aliyun_push (from `.symlinks/plugins/aliyun_push/ios`)
|
- aliyun_push (from `.symlinks/plugins/aliyun_push/ios`)
|
||||||
- amap_flutter_location (from `.symlinks/plugins/amap_flutter_location/ios`)
|
- amap_flutter_location (from `.symlinks/plugins/amap_flutter_location/ios`)
|
||||||
- amap_flutter_map (from `.symlinks/plugins/amap_flutter_map/ios`)
|
- amap_flutter_map (from `.symlinks/plugins/amap_flutter_map/ios`)
|
||||||
|
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
||||||
|
- audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`)
|
||||||
- auto_orientation (from `.symlinks/plugins/auto_orientation/ios`)
|
- auto_orientation (from `.symlinks/plugins/auto_orientation/ios`)
|
||||||
- camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
|
- camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
|
||||||
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
||||||
- Flutter (from `Flutter`)
|
- Flutter (from `Flutter`)
|
||||||
- flutter_native_contact_picker (from `.symlinks/plugins/flutter_native_contact_picker/ios`)
|
- flutter_native_contact_picker (from `.symlinks/plugins/flutter_native_contact_picker/ios`)
|
||||||
|
- flutter_sound (from `.symlinks/plugins/flutter_sound/ios`)
|
||||||
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
|
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
|
||||||
|
- g711_flutter (from `.symlinks/plugins/g711_flutter/ios`)
|
||||||
- google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`)
|
- google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`)
|
||||||
|
- image_gallery_saver (from `.symlinks/plugins/image_gallery_saver/ios`)
|
||||||
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
||||||
|
- just_audio (from `.symlinks/plugins/just_audio/ios`)
|
||||||
- network_info_plus (from `.symlinks/plugins/network_info_plus/ios`)
|
- network_info_plus (from `.symlinks/plugins/network_info_plus/ios`)
|
||||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||||
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
||||||
@ -119,6 +139,7 @@ SPEC REPOS:
|
|||||||
- AMap3DMap
|
- AMap3DMap
|
||||||
- AMapFoundation
|
- AMapFoundation
|
||||||
- AMapLocation
|
- AMapLocation
|
||||||
|
- flutter_sound_core
|
||||||
- FMDB
|
- FMDB
|
||||||
- GoogleMaps
|
- GoogleMaps
|
||||||
- Protobuf
|
- Protobuf
|
||||||
@ -134,6 +155,10 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/amap_flutter_location/ios"
|
:path: ".symlinks/plugins/amap_flutter_location/ios"
|
||||||
amap_flutter_map:
|
amap_flutter_map:
|
||||||
:path: ".symlinks/plugins/amap_flutter_map/ios"
|
:path: ".symlinks/plugins/amap_flutter_map/ios"
|
||||||
|
audio_session:
|
||||||
|
:path: ".symlinks/plugins/audio_session/ios"
|
||||||
|
audioplayers_darwin:
|
||||||
|
:path: ".symlinks/plugins/audioplayers_darwin/ios"
|
||||||
auto_orientation:
|
auto_orientation:
|
||||||
:path: ".symlinks/plugins/auto_orientation/ios"
|
:path: ".symlinks/plugins/auto_orientation/ios"
|
||||||
camera_avfoundation:
|
camera_avfoundation:
|
||||||
@ -144,12 +169,20 @@ EXTERNAL SOURCES:
|
|||||||
:path: Flutter
|
:path: Flutter
|
||||||
flutter_native_contact_picker:
|
flutter_native_contact_picker:
|
||||||
:path: ".symlinks/plugins/flutter_native_contact_picker/ios"
|
:path: ".symlinks/plugins/flutter_native_contact_picker/ios"
|
||||||
|
flutter_sound:
|
||||||
|
:path: ".symlinks/plugins/flutter_sound/ios"
|
||||||
fluttertoast:
|
fluttertoast:
|
||||||
:path: ".symlinks/plugins/fluttertoast/ios"
|
:path: ".symlinks/plugins/fluttertoast/ios"
|
||||||
|
g711_flutter:
|
||||||
|
:path: ".symlinks/plugins/g711_flutter/ios"
|
||||||
google_maps_flutter_ios:
|
google_maps_flutter_ios:
|
||||||
:path: ".symlinks/plugins/google_maps_flutter_ios/ios"
|
:path: ".symlinks/plugins/google_maps_flutter_ios/ios"
|
||||||
|
image_gallery_saver:
|
||||||
|
:path: ".symlinks/plugins/image_gallery_saver/ios"
|
||||||
image_picker_ios:
|
image_picker_ios:
|
||||||
:path: ".symlinks/plugins/image_picker_ios/ios"
|
:path: ".symlinks/plugins/image_picker_ios/ios"
|
||||||
|
just_audio:
|
||||||
|
:path: ".symlinks/plugins/just_audio/ios"
|
||||||
network_info_plus:
|
network_info_plus:
|
||||||
:path: ".symlinks/plugins/network_info_plus/ios"
|
:path: ".symlinks/plugins/network_info_plus/ios"
|
||||||
package_info_plus:
|
package_info_plus:
|
||||||
@ -184,31 +217,38 @@ SPEC CHECKSUMS:
|
|||||||
amap_flutter_map: 979e54d227cedac6c7504a2151bfbf3bcf96760a
|
amap_flutter_map: 979e54d227cedac6c7504a2151bfbf3bcf96760a
|
||||||
AMapFoundation: 9885c48fc3a78fdfb84a0299a2293e56ea3c9fec
|
AMapFoundation: 9885c48fc3a78fdfb84a0299a2293e56ea3c9fec
|
||||||
AMapLocation: 5248aec2455ebb5d104b367813c946430a2ee033
|
AMapLocation: 5248aec2455ebb5d104b367813c946430a2ee033
|
||||||
|
audio_session: 4f3e461722055d21515cf3261b64c973c062f345
|
||||||
|
audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40
|
||||||
auto_orientation: 102ed811a5938d52c86520ddd7ecd3a126b5d39d
|
auto_orientation: 102ed811a5938d52c86520ddd7ecd3a126b5d39d
|
||||||
camera_avfoundation: 3125e8cd1a4387f6f31c6c63abb8a55892a9eeeb
|
camera_avfoundation: 3125e8cd1a4387f6f31c6c63abb8a55892a9eeeb
|
||||||
device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
|
device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
|
||||||
EMASRest: 8df6f87836767a9415ad5cc4af739bc9d215b475
|
EMASRest: 8df6f87836767a9415ad5cc4af739bc9d215b475
|
||||||
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
|
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
|
||||||
flutter_native_contact_picker: bd430ba0fbf82768bb50c2c52a69a65759a8f907
|
flutter_native_contact_picker: bd430ba0fbf82768bb50c2c52a69a65759a8f907
|
||||||
fluttertoast: 31b00dabfa7fb7bacd9e7dbee580d7a2ff4bf265
|
flutter_sound: c60effa2a350fb977885f0db2fbc4c1ad5160900
|
||||||
|
flutter_sound_core: 26c10e5832e76aaacfae252d8925232281c486ae
|
||||||
|
fluttertoast: fafc4fa4d01a6a9e4f772ecd190ffa525e9e2d9c
|
||||||
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
||||||
|
g711_flutter: 8f2769052d2cf3549f83d11e1c42d81d94441123
|
||||||
google_maps_flutter_ios: abdac20d6ce8931f6ebc5f46616df241bfaa2cfd
|
google_maps_flutter_ios: abdac20d6ce8931f6ebc5f46616df241bfaa2cfd
|
||||||
GoogleMaps: 025272d5876d3b32604e5c080dc25eaf68764693
|
GoogleMaps: 025272d5876d3b32604e5c080dc25eaf68764693
|
||||||
|
image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb
|
||||||
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
|
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
|
||||||
|
just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
|
||||||
network_info_plus: 6d0c3eb8367b8164fa3fb0c19875e3f59d49697f
|
network_info_plus: 6d0c3eb8367b8164fa3fb0c19875e3f59d49697f
|
||||||
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
||||||
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
|
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
|
||||||
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
|
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
|
||||||
Protobuf: d94761c33f1239c0a43a0817ca1a5f7f7c900241
|
Protobuf: 6a4183ec1d51649eb2be7b86ccc286e5c539219c
|
||||||
reactive_ble_mobile: 9ce6723d37ccf701dbffd202d487f23f5de03b4c
|
reactive_ble_mobile: 9ce6723d37ccf701dbffd202d487f23f5de03b4c
|
||||||
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
|
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
|
||||||
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
|
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
|
||||||
SwiftProtobuf: 69f02cd54fb03201c5e6bf8b76f687c5ef7541a3
|
SwiftProtobuf: 69f02cd54fb03201c5e6bf8b76f687c5ef7541a3
|
||||||
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
|
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
|
||||||
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
|
url_launcher_ios: bf5ce03e0e2088bad9cc378ea97fa0ed5b49673b
|
||||||
video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126
|
video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126
|
||||||
webview_flutter_wkwebview: 2e2d318f21a5e036e2c3f26171342e95908bd60a
|
webview_flutter_wkwebview: 2e2d318f21a5e036e2c3f26171342e95908bd60a
|
||||||
|
|
||||||
PODFILE CHECKSUM: adf6d8caf5faa9ea4ee2a2ea37f5aea37a6520d7
|
PODFILE CHECKSUM: adf6d8caf5faa9ea4ee2a2ea37f5aea37a6520d7
|
||||||
|
|
||||||
COCOAPODS: 1.14.3
|
COCOAPODS: 1.12.1
|
||||||
|
|||||||
@ -666,7 +666,7 @@
|
|||||||
97C146E61CF9000F007C117D /* Project object */ = {
|
97C146E61CF9000F007C117D /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 1300;
|
LastUpgradeCheck = 1430;
|
||||||
ORGANIZATIONNAME = "";
|
ORGANIZATIONNAME = "";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
97C146ED1CF9000F007C117D = {
|
97C146ED1CF9000F007C117D = {
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1300"
|
LastUpgradeVersion = "1430"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
import '../../../../tools/baseGetXController.dart';
|
import '../../../../tools/baseGetXController.dart';
|
||||||
import '../../../../tools/eventBusEventManage.dart';
|
import '../../../../tools/eventBusEventManage.dart';
|
||||||
import 'lockMonitoring_state.dart';
|
import 'lockMonitoring_state.dart';
|
||||||
@ -12,8 +13,14 @@ class LockMonitoringLogic extends BaseGetXController {
|
|||||||
StreamSubscription? _getTVDataRefreshUIEvent;
|
StreamSubscription? _getTVDataRefreshUIEvent;
|
||||||
void _getTVDataRefreshUIAction() {
|
void _getTVDataRefreshUIAction() {
|
||||||
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
||||||
_getTVDataRefreshUIEvent = eventBus.on<GetTVDataRefreshUI>().listen((event) {
|
_getTVDataRefreshUIEvent =
|
||||||
state.listData.value = event.tvList;
|
eventBus.on<GetTVDataRefreshUI>().listen((event) {
|
||||||
|
if (event.tvList.isNotEmpty) {
|
||||||
|
// 预加载图片数据
|
||||||
|
Uint8List imageData = Uint8List.fromList(event.tvList);
|
||||||
|
// 更新状态
|
||||||
|
state.listData.value = imageData;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,7 +47,6 @@ class LockMonitoringLogic extends BaseGetXController {
|
|||||||
void onInit() {
|
void onInit() {
|
||||||
// TODO: implement onInit
|
// TODO: implement onInit
|
||||||
super.onInit();
|
super.onInit();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -50,5 +56,4 @@ class LockMonitoringLogic extends BaseGetXController {
|
|||||||
_getTVDataRefreshUIEvent!.cancel();
|
_getTVDataRefreshUIEvent!.cancel();
|
||||||
_getUDPStatusRefreshUIEvent!.cancel();
|
_getUDPStatusRefreshUIEvent!.cancel();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
import 'package:flutter_sound/flutter_sound.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:network_info_plus/network_info_plus.dart';
|
import 'package:network_info_plus/network_info_plus.dart';
|
||||||
|
|
||||||
import '../../../../appRouters.dart';
|
|
||||||
import '../../../../app_settings/app_colors.dart';
|
import '../../../../app_settings/app_colors.dart';
|
||||||
import '../../../../talk/udp/udp_manage.dart';
|
import '../../../../talk/udp/udp_manage.dart';
|
||||||
import '../../../../talk/udp/udp_senderManage.dart';
|
import '../../../../talk/udp/udp_senderManage.dart';
|
||||||
@ -24,68 +24,77 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
|||||||
final logic = Get.put(LockMonitoringLogic());
|
final logic = Get.put(LockMonitoringLogic());
|
||||||
final state = Get.find<LockMonitoringLogic>().state;
|
final state = Get.find<LockMonitoringLogic>().state;
|
||||||
|
|
||||||
|
late FlutterSoundRecorder recorder;
|
||||||
|
late FlutterSoundPlayer player;
|
||||||
|
late String filePath;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
|
||||||
|
_initRecorder();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
width: 1.sw,
|
width: 1.sw,
|
||||||
height: 1.sh,
|
height: 1.sh,
|
||||||
// color: Colors.transparent,
|
|
||||||
child: Stack(
|
child: Stack(
|
||||||
// alignment: Alignment.bottomCenter,
|
children: [
|
||||||
children: [
|
Obx(() => state.listData.value.isEmpty
|
||||||
// state.listData.value.isEmpty ? Image.asset("images/icon_test20231113.png", width: 1.sw, height: 1.sh, fit: BoxFit.cover) :
|
? Container(color: Colors.transparent)
|
||||||
Obx(() =>
|
: Image.memory(
|
||||||
state.listData.value.isEmpty
|
state.listData.value,
|
||||||
? Container(color: Colors.red)
|
// key: ValueKey<int>(state.listData.value.hashCode),
|
||||||
:Image.memory(
|
gaplessPlayback: true,
|
||||||
Uint8List.fromList(state.listData.value),
|
width: 1.sw,
|
||||||
width: 1.sw,
|
height: 1.sh,
|
||||||
height: 1.sh,
|
fit: BoxFit.cover,
|
||||||
fit: BoxFit.cover,
|
)),
|
||||||
)),
|
Positioned(
|
||||||
Positioned(
|
top: ScreenUtil().statusBarHeight + 30.h,
|
||||||
top: ScreenUtil().statusBarHeight + 30.h,
|
child: Row(children: [
|
||||||
child: Row(children: [
|
SizedBox(width: 30.w),
|
||||||
SizedBox(width: 30.w),
|
GestureDetector(
|
||||||
GestureDetector(
|
onTap: () {
|
||||||
onTap: () {
|
Get.back();
|
||||||
Get.back();
|
},
|
||||||
},
|
child: Container(
|
||||||
child: Container(
|
decoration: BoxDecoration(
|
||||||
decoration: BoxDecoration(
|
color: Colors.white,
|
||||||
color: Colors.white,
|
borderRadius: BorderRadius.circular(25.h)),
|
||||||
borderRadius: BorderRadius.circular(25.h)),
|
padding: EdgeInsets.all(10.w),
|
||||||
padding: EdgeInsets.all(10.w),
|
child: Image(
|
||||||
child: Image(
|
width: 40.w,
|
||||||
width: 40.w,
|
height: 40.w,
|
||||||
height: 40.w,
|
image: const AssetImage("images/icon_left_black.png"),
|
||||||
image: const AssetImage("images/icon_left_black.png"),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
]),
|
),
|
||||||
),
|
),
|
||||||
Positioned(
|
]),
|
||||||
bottom: 10.w,
|
|
||||||
child: Container(
|
|
||||||
width: 1.sw - 30.w * 2,
|
|
||||||
// height: 300.h,
|
|
||||||
margin: EdgeInsets.all(30.w),
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: const Color(0xC83C3F41),
|
|
||||||
borderRadius: BorderRadius.circular(20.h)),
|
|
||||||
child: Column(
|
|
||||||
children: [
|
|
||||||
SizedBox(height: 20.h),
|
|
||||||
bottomTopBtnWidget(),
|
|
||||||
SizedBox(height: 20.h),
|
|
||||||
bottomBottomBtnWidget(),
|
|
||||||
SizedBox(height: 20.h),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
))
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
|
Positioned(
|
||||||
|
bottom: 10.w,
|
||||||
|
child: Container(
|
||||||
|
width: 1.sw - 30.w * 2,
|
||||||
|
// height: 300.h,
|
||||||
|
margin: EdgeInsets.all(30.w),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: const Color(0xC83C3F41),
|
||||||
|
borderRadius: BorderRadius.circular(20.h)),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
SizedBox(height: 20.h),
|
||||||
|
bottomTopBtnWidget(),
|
||||||
|
SizedBox(height: 20.h),
|
||||||
|
bottomBottomBtnWidget(),
|
||||||
|
SizedBox(height: 20.h),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
))
|
||||||
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,10 +157,9 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget bottomBottomBtnWidget() {
|
Widget bottomBottomBtnWidget() {
|
||||||
return Row(
|
return Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
Obx(() => bottomBtnItemWidget(
|
||||||
children: [
|
getAnswerBtnImg(), getAnswerBtnName(), Colors.white, () async {
|
||||||
Obx(() => bottomBtnItemWidget(getAnswerBtnImg(), getAnswerBtnName(), Colors.white, () async {
|
|
||||||
var userMobileIP = await NetworkInfo().getWifiIP();
|
var userMobileIP = await NetworkInfo().getWifiIP();
|
||||||
var userMobile = await Storage.getMobile();
|
var userMobile = await Storage.getMobile();
|
||||||
|
|
||||||
@ -166,29 +174,30 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
|||||||
userMobileIP: userMobileIP,
|
userMobileIP: userMobileIP,
|
||||||
endData: []);
|
endData: []);
|
||||||
})),
|
})),
|
||||||
bottomBtnItemWidget("images/main/icon_lockDetail_hangUp.png", "挂断", Colors.red, () async {
|
bottomBtnItemWidget(
|
||||||
var userMobileIP = await NetworkInfo().getWifiIP();
|
"images/main/icon_lockDetail_hangUp.png", "挂断", Colors.red, () async {
|
||||||
var userMobile = await Storage.getMobile();
|
var userMobileIP = await NetworkInfo().getWifiIP();
|
||||||
|
var userMobile = await Storage.getMobile();
|
||||||
// 挂断
|
|
||||||
UDPSenderManage.sendMainProtocol(
|
|
||||||
command: 150,
|
|
||||||
commandTypeIsCalling: 1,
|
|
||||||
subCommand: 30,
|
|
||||||
lockID: UDPManage().lockId,
|
|
||||||
lockIP: UDPManage().host,
|
|
||||||
userMobile: userMobile,
|
|
||||||
userMobileIP: userMobileIP,
|
|
||||||
endData: []);
|
|
||||||
}),
|
|
||||||
bottomBtnItemWidget("images/main/icon_lockDetail_monitoringUnlock.png", "开锁", AppColors.mainColor, () {
|
|
||||||
showDeletPasswordAlertDialog(context);
|
|
||||||
})
|
|
||||||
|
|
||||||
|
// 挂断
|
||||||
|
UDPSenderManage.sendMainProtocol(
|
||||||
|
command: 150,
|
||||||
|
commandTypeIsCalling: 1,
|
||||||
|
subCommand: 30,
|
||||||
|
lockID: UDPManage().lockId,
|
||||||
|
lockIP: UDPManage().host,
|
||||||
|
userMobile: userMobile,
|
||||||
|
userMobileIP: userMobileIP,
|
||||||
|
endData: []);
|
||||||
|
}),
|
||||||
|
bottomBtnItemWidget("images/main/icon_lockDetail_monitoringUnlock.png",
|
||||||
|
"开锁", AppColors.mainColor, () {
|
||||||
|
showDeletPasswordAlertDialog(context);
|
||||||
|
})
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
String getAnswerBtnImg(){
|
String getAnswerBtnImg() {
|
||||||
switch (state.udpStatus.value) {
|
switch (state.udpStatus.value) {
|
||||||
case 8:
|
case 8:
|
||||||
{
|
{
|
||||||
@ -205,7 +214,7 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String getAnswerBtnName(){
|
String getAnswerBtnName() {
|
||||||
switch (state.udpStatus.value) {
|
switch (state.udpStatus.value) {
|
||||||
case 8:
|
case 8:
|
||||||
{
|
{
|
||||||
@ -227,15 +236,15 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
|||||||
var wh = 80.w;
|
var wh = 80.w;
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: onClick,
|
onTap: onClick,
|
||||||
onLongPress: (){
|
onLongPress: () {
|
||||||
print("onLongPress");
|
print("onLongPress");
|
||||||
if(state.udpStatus.value == 8){
|
if (state.udpStatus.value == 8) {
|
||||||
state.udpStatus.value = 9;
|
state.udpStatus.value = 9;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLongPressUp: () {
|
onLongPressUp: () {
|
||||||
print("onLongPressUp");
|
print("onLongPressUp");
|
||||||
if(state.udpStatus.value == 9){
|
if (state.udpStatus.value == 9) {
|
||||||
state.udpStatus.value = 8;
|
state.udpStatus.value = 8;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -265,7 +274,7 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
|||||||
|
|
||||||
void showDeletPasswordAlertDialog(BuildContext context) {
|
void showDeletPasswordAlertDialog(BuildContext context) {
|
||||||
showDialog(
|
showDialog(
|
||||||
barrierDismissible:false,
|
barrierDismissible: false,
|
||||||
context: context,
|
context: context,
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return ShowTFView(
|
return ShowTFView(
|
||||||
@ -301,4 +310,37 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//录音处理
|
||||||
|
_initRecorder() {
|
||||||
|
recorder = FlutterSoundRecorder();
|
||||||
|
}
|
||||||
|
|
||||||
|
//开始录音
|
||||||
|
_startRecording() async {
|
||||||
|
filePath = 'your_output_file.wav';
|
||||||
|
await recorder.startRecorder(
|
||||||
|
toFile: filePath,
|
||||||
|
codec: Codec.pcm16WAV,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//停止录音
|
||||||
|
_stopRecording() async {
|
||||||
|
await recorder.stopRecorder();
|
||||||
|
}
|
||||||
|
|
||||||
|
//播放录音
|
||||||
|
_playRecording() async {
|
||||||
|
player = FlutterSoundPlayer();
|
||||||
|
await player.startPlayer(
|
||||||
|
fromURI: filePath,
|
||||||
|
codec: Codec.pcm16WAV,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//停止播放
|
||||||
|
_stopPlaying() async {
|
||||||
|
await player.stopPlayer();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,9 @@
|
|||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:convert/convert.dart';
|
|
||||||
import 'package:flutter_sound/flutter_sound.dart';
|
import 'package:flutter_sound/flutter_sound.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:get/get_core/src/get_main.dart';
|
||||||
import 'package:star_lock/appRouters.dart';
|
import 'package:star_lock/appRouters.dart';
|
||||||
// import 'package:just_audio/just_audio.dart';
|
|
||||||
import 'package:star_lock/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart';
|
import 'package:star_lock/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart';
|
||||||
import 'package:star_lock/talk/call/g711Decoder.dart';
|
import 'package:star_lock/talk/call/g711Decoder.dart';
|
||||||
import 'package:star_lock/talk/call/iFrameInfo.dart';
|
import 'package:star_lock/talk/call/iFrameInfo.dart';
|
||||||
@ -25,8 +24,8 @@ class CallTalk {
|
|||||||
int status = 0; // 假设有这个成员变量
|
int status = 0; // 假设有这个成员变量
|
||||||
IframeInfo? iframe; // 假设有这个成员变量
|
IframeInfo? iframe; // 假设有这个成员变量
|
||||||
var growableList;
|
var growableList;
|
||||||
LockMonitoringPage callOut = const LockMonitoringPage();
|
bool getFirstFrame = false; //是否得到了第一帧
|
||||||
FlutterSoundPlayer _audioPlayer = FlutterSoundPlayer();
|
final FlutterSoundPlayer _audioPlayer = FlutterSoundPlayer();
|
||||||
|
|
||||||
CallTalk._init() {
|
CallTalk._init() {
|
||||||
iframe = IframeInfo();
|
iframe = IframeInfo();
|
||||||
@ -53,7 +52,7 @@ class CallTalk {
|
|||||||
|
|
||||||
// 音频数据
|
// 音频数据
|
||||||
if (bb[61] == 1) {
|
if (bb[61] == 1) {
|
||||||
// 如果是音频数据且状态符合条件
|
print('dinglingling音频数据来啦啦啦啦啦啦啦啦啦');
|
||||||
// 用你的711音频数据替换这里的Uint8List
|
// 用你的711音频数据替换这里的Uint8List
|
||||||
Uint8List rawData = G711Decoder().decodeG711uLaw(bb);
|
Uint8List rawData = G711Decoder().decodeG711uLaw(bb);
|
||||||
_playRawData(rawData);
|
_playRawData(rawData);
|
||||||
@ -91,8 +90,6 @@ class CallTalk {
|
|||||||
// 这里判断是否是同一帧,如果不是同一帧就重新创建一个 IframeInfo
|
// 这里判断是否是同一帧,如果不是同一帧就重新创建一个 IframeInfo
|
||||||
if (getIframeIndex != iframe!.iframeIndex) {
|
if (getIframeIndex != iframe!.iframeIndex) {
|
||||||
iframe = IframeInfo();
|
iframe = IframeInfo();
|
||||||
// print('11111111change getIframeIndex:$getIframeIndex ');
|
|
||||||
// print('11111111change iframe.iframeIndex: ${iframe!.iframeIndex}');
|
|
||||||
iframe!.iframeIndex = getIframeIndex;
|
iframe!.iframeIndex = getIframeIndex;
|
||||||
iframe!.bagNum = getBagNum;
|
iframe!.bagNum = getBagNum;
|
||||||
// iframe!.cur_len = alen;
|
// iframe!.cur_len = alen;
|
||||||
@ -101,56 +98,32 @@ class CallTalk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
iframe!.bagReceive++;
|
iframe!.bagReceive++;
|
||||||
// int start = bagLen * (getBagIndex - FIRSTINDEX);
|
|
||||||
// int end = start + blen;
|
|
||||||
|
|
||||||
// 确保 iframe!.bb 不为 null,并且足够长
|
|
||||||
// if (iframe.bb == null || iframe.bb!.length < end) {
|
|
||||||
// iframe.bb = Uint8List(end);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// print('22222222change getIframeIndex:$getIframeIndex ');
|
|
||||||
|
|
||||||
// 如果是同一帧就添加起来
|
// 如果是同一帧就添加起来
|
||||||
if (getIframeIndex == iframe!.iframeIndex) {
|
if (getIframeIndex == iframe!.iframeIndex) {
|
||||||
// print('33333333change iframe.iframeIndex: ${iframe!.iframeIndex}');
|
|
||||||
var getList = bb.sublist(77, bb.length);
|
var getList = bb.sublist(77, bb.length);
|
||||||
print('getList:${getList}');
|
|
||||||
growableList.addAll(getList);
|
growableList.addAll(getList);
|
||||||
// print('growableList: $growableList');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// copyBytes(iframe!.bb!, start, bb, POS_data, blen);
|
|
||||||
// 打印输出看看字节数组的内容
|
|
||||||
|
|
||||||
print(
|
print(
|
||||||
'iframe.bagNum: ${iframe!.bagNum} iframe.bagReceive: ${iframe!.bagReceive}');
|
'iframe.bagNum: ${iframe!.bagNum} iframe.bagReceive: ${iframe!.bagReceive}');
|
||||||
|
|
||||||
// 如果收到的包数等于总包数,说明这一帧数据已经接收完毕
|
// 如果收到的包数等于总包数,说明这一帧数据已经接收完毕
|
||||||
if (iframe!.bagNum == iframe!.bagReceive) {
|
if (iframe!.bagNum == iframe!.bagReceive) {
|
||||||
// List<int> data = iframe!.bb!.sublist(0, iframe!.cur_len);
|
print(
|
||||||
print('播放第${iframe!.iframeIndex}帧 一帧图片的Data: $growableList');
|
'播放第${iframe!.iframeIndex}帧 一帧图片的hexStringData: ${Uint8List.fromList(growableList)}');
|
||||||
String hexString =
|
|
||||||
uint8ListToHexString(Uint8List.fromList(growableList));
|
//判断第一帧是否接收到
|
||||||
// print('播放第${iframe!.iframeIndex}帧 hexStringLength:${hexString.length} 一帧图片的hexStringData: $hexString'); // 输出: 0a141e28
|
if (iframe!.iframeIndex == 0) {
|
||||||
|
getFirstFrame = true;
|
||||||
|
eventBus.fire(GetFirstFrameGoPush(getFirstFrame));
|
||||||
|
}
|
||||||
|
|
||||||
// if (iframe!.iframeIndex == 1) {
|
|
||||||
print('下面就是你要的');
|
|
||||||
printByteArray('播放第${iframe!.iframeIndex}帧 一帧图片的hexStringData: ',
|
|
||||||
Uint8List.fromList(growableList));
|
|
||||||
eventBus.fire(GetTVDataRefreshUI(growableList));
|
eventBus.fire(GetTVDataRefreshUI(growableList));
|
||||||
// }
|
|
||||||
// eventBus.fire(GetTVDataRefreshUI(growableList));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get.toNamed(Routers.lockMonitoringPage, arguments: {
|
|
||||||
// "lockId": "111"
|
|
||||||
// });
|
|
||||||
// 打印拷贝后的目标数据
|
|
||||||
// print(iframe.bb);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//视频相关处理
|
||||||
void printByteArray(String printTitle, Uint8List byteArray) {
|
void printByteArray(String printTitle, Uint8List byteArray) {
|
||||||
final int chunkSize = byteArray.length; // 每行显示的字节数
|
final int chunkSize = byteArray.length; // 每行显示的字节数
|
||||||
int length = byteArray.length;
|
int length = byteArray.length;
|
||||||
@ -165,29 +138,7 @@ class CallTalk {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String uint8ListToHexString(Uint8List uint8List) {
|
//音频相关处理
|
||||||
return hex.encode(uint8List);
|
|
||||||
}
|
|
||||||
|
|
||||||
int getShortFromByte(Uint8List bb, int pos) {
|
|
||||||
ByteData byteData = ByteData.sublistView(bb, pos, pos + 2);
|
|
||||||
return byteData.getInt16(0, Endian.little);
|
|
||||||
}
|
|
||||||
|
|
||||||
void copyBytes(Uint8List destination, int destStart, Uint8List source,
|
|
||||||
int sourceStart, int length) {
|
|
||||||
if (destination.length < destStart + length ||
|
|
||||||
source.length < sourceStart + length) {
|
|
||||||
// 处理越界的情况,这里你可以抛出异常或者进行其他处理
|
|
||||||
print('Error: Index out of range');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < length; i++) {
|
|
||||||
destination[destStart + i] = source[sourceStart + i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> _initializeAudioPlayer() async {
|
Future<void> _initializeAudioPlayer() async {
|
||||||
await _audioPlayer.openPlayer();
|
await _audioPlayer.openPlayer();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
@ -10,34 +8,36 @@ import '../../tools/storage.dart';
|
|||||||
import 'udp_manage.dart';
|
import 'udp_manage.dart';
|
||||||
import 'udp_senderManage.dart';
|
import 'udp_senderManage.dart';
|
||||||
|
|
||||||
class UdpHelp{
|
class UdpHelp {
|
||||||
|
|
||||||
Timer? timer;
|
Timer? timer;
|
||||||
|
|
||||||
openUDP() async {
|
openUDP() async {
|
||||||
// 从服务器获取ip跟端口
|
// 从服务器获取ip跟端口
|
||||||
var entity = await ApiRepository.to.getWifiLockServiceIpAndPort();
|
var entity = await ApiRepository.to.getWifiLockServiceIpAndPort();
|
||||||
if(entity.errorCode! == 0){
|
if (entity.errorCode! == 0) {
|
||||||
UDPManage();
|
UDPManage();
|
||||||
// UDPManage().initUdp();
|
// UDPManage().initUdp();
|
||||||
UDPManage().port = int.parse(entity.data!.serviceList![0].port!);
|
UDPManage().port = int.parse(entity.data!.serviceList![0].port!);
|
||||||
|
|
||||||
var serversList = <int>[];
|
var serversList = <int>[];
|
||||||
for(int i = 0; i<entity.data!.serviceList!.length; i++){
|
for (int i = 0; i < entity.data!.serviceList!.length; i++) {
|
||||||
var item = entity.data!.serviceList![i];
|
var item = entity.data!.serviceList![i];
|
||||||
if(item.serviceIp!.contains("192")){
|
if (item.serviceIp!.contains("192")) {
|
||||||
UDPManage().host = entity.data!.serviceList![0].serviceIp!;
|
UDPManage().host = entity.data!.serviceList![0].serviceIp!;
|
||||||
var itemList = item.serviceIp!.split(".");
|
var itemList = item.serviceIp!.split(".");
|
||||||
for (var element in itemList) {
|
for (var element in itemList) {
|
||||||
serversList.add(int.parse(element));
|
serversList.add(int.parse(element));
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
List<InternetAddress> addresses = await InternetAddress.lookup(item.serviceIp!);
|
List<InternetAddress> addresses =
|
||||||
|
await InternetAddress.lookup(item.serviceIp!);
|
||||||
UDPManage().host = addresses.first.address;
|
UDPManage().host = addresses.first.address;
|
||||||
var itemList = addresses.first.address.split(".");
|
var itemList = addresses.first.address.split(".");
|
||||||
for (var element in itemList) {
|
for (var element in itemList) {
|
||||||
serversList.add(int.parse(element));
|
serversList.add(int.parse(element));
|
||||||
}
|
}
|
||||||
print('Resolved google.com to address: ${addresses.first.address} serversList:$serversList');
|
print(
|
||||||
|
'Resolved google.com to address: ${addresses.first.address} serversList:$serversList');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ class UdpHelp{
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
dispose(){
|
dispose() {
|
||||||
timer!.cancel();
|
timer!.cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,29 +1,30 @@
|
|||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:audioplayers/audioplayers.dart';
|
import 'package:audioplayers/audioplayers.dart';
|
||||||
import 'package:fast_gbk/fast_gbk.dart';
|
import 'package:fast_gbk/fast_gbk.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:star_lock/tools/eventBusEventManage.dart';
|
||||||
|
|
||||||
import '../../appRouters.dart';
|
import '../../appRouters.dart';
|
||||||
import '../../main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart';
|
import '../../main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart';
|
||||||
import '../../tools/storage.dart';
|
import '../../tools/storage.dart';
|
||||||
import 'udp_manage.dart';
|
import 'udp_manage.dart';
|
||||||
|
|
||||||
class UDPTalkClass{
|
class UDPTalkClass {
|
||||||
static UDPTalkClass? _manager;
|
static UDPTalkClass? _manager;
|
||||||
static UDPTalkClass _share(){
|
static UDPTalkClass _share() {
|
||||||
_manager ??= UDPTalkClass._init();
|
_manager ??= UDPTalkClass._init();
|
||||||
return _manager!;
|
return _manager!;
|
||||||
}
|
}
|
||||||
|
|
||||||
factory UDPTalkClass() => _share();
|
factory UDPTalkClass() => _share();
|
||||||
UDPTalkClass get manager => _share();
|
UDPTalkClass get manager => _share();
|
||||||
|
|
||||||
UDPTalkClass._init();
|
UDPTalkClass._init();
|
||||||
|
|
||||||
var status = 0; //0:初始状态 1:等待监视 2: 3:监视中 4:呼叫成功 5:主角通话中 6:被叫通话 8:被叫通话中
|
var status = 0; //0:初始状态 1:等待监视 2: 3:监视中 4:呼叫成功 5:主角通话中 6:被叫通话 8:被叫通话中
|
||||||
var remoteEquid;// 手机号
|
var remoteEquid; // 手机号
|
||||||
late Timer timer;
|
late Timer timer;
|
||||||
// 该字段是为了判断是否跳转到接听界面 挂断或者退出接听界面要记得变更状态
|
// 该字段是为了判断是否跳转到接听界面 挂断或者退出接听界面要记得变更状态
|
||||||
var isBeCall = false;
|
var isBeCall = false;
|
||||||
@ -35,7 +36,7 @@ class UDPTalkClass{
|
|||||||
// return;
|
// return;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
if(status == 0){
|
if (status == 0) {
|
||||||
// 空闲
|
// 空闲
|
||||||
// 响铃
|
// 响铃
|
||||||
// [[Pub getApp] ring];
|
// [[Pub getApp] ring];
|
||||||
@ -59,7 +60,7 @@ class UDPTalkClass{
|
|||||||
// fullscreenDialog: true
|
// fullscreenDialog: true
|
||||||
// ));
|
// ));
|
||||||
|
|
||||||
if(UDPTalkClass().isBeCall == false){
|
if (UDPTalkClass().isBeCall == false) {
|
||||||
UDPTalkClass().isBeCall = true;
|
UDPTalkClass().isBeCall = true;
|
||||||
// 保持连接
|
// 保持连接
|
||||||
timer = Timer.periodic(1.seconds, (timer) {
|
timer = Timer.periodic(1.seconds, (timer) {
|
||||||
@ -67,23 +68,38 @@ class UDPTalkClass{
|
|||||||
data[8] = 9;
|
data[8] = 9;
|
||||||
UDPManage().sendData(data);
|
UDPManage().sendData(data);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// _getFirstFrameGoPushAction();
|
||||||
|
Future.delayed(const Duration(seconds: 1), () {
|
||||||
|
// 在这里写要延迟执行的代码
|
||||||
|
Get.toNamed(Routers.lockMonitoringPage, arguments: {"lockId": "111"});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Get.toNamed(Routers.lockMonitoringPage, arguments: {
|
|
||||||
"lockId": "111"
|
|
||||||
});
|
|
||||||
playLocalAudio();
|
playLocalAudio();
|
||||||
}else{
|
} else {
|
||||||
// 忙
|
// 忙
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _getFirstFrameGoPushAction() {
|
||||||
|
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
||||||
|
StreamSubscription _GetFirstFrameGoPushEvent =
|
||||||
|
eventBus.on<GetFirstFrameGoPush>().listen((event) {
|
||||||
|
if (event.isFirstFrame == true) {
|
||||||
|
Future.delayed(const Duration(seconds: 1), () {
|
||||||
|
// 在这里写要延迟执行的代码
|
||||||
|
Get.toNamed(Routers.lockMonitoringPage, arguments: {"lockId": "111"});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// 判断是否是call的本人
|
// 判断是否是call的本人
|
||||||
Future<bool> isCallMe(List<int>? data) async {
|
Future<bool> isCallMe(List<int>? data) async {
|
||||||
final loginData = await Storage.getLoginData();
|
final loginData = await Storage.getLoginData();
|
||||||
print("getEquidFrombb(data, 1000):${getEquidFrombb(data, 12)}");
|
print("getEquidFrombb(data, 1000):${getEquidFrombb(data, 12)}");
|
||||||
if(loginData!.mobile == getEquidFrombb(data, 12)){
|
if (loginData!.mobile == getEquidFrombb(data, 12)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -93,17 +109,23 @@ class UDPTalkClass{
|
|||||||
var equid = "";
|
var equid = "";
|
||||||
int equlen = 8;
|
int equlen = 8;
|
||||||
|
|
||||||
if (bb![pos] == 77) { //M
|
if (bb![pos] == 77) {
|
||||||
|
//M
|
||||||
equlen = 8;
|
equlen = 8;
|
||||||
} else if (bb[pos] == 87) { //W
|
} else if (bb[pos] == 87) {
|
||||||
|
//W
|
||||||
equlen = 5;
|
equlen = 5;
|
||||||
} else if (bb[pos] == 72) { //H
|
} else if (bb[pos] == 72) {
|
||||||
|
//H
|
||||||
equlen = 12;
|
equlen = 12;
|
||||||
} else if (bb[pos] == 83) { //S
|
} else if (bb[pos] == 83) {
|
||||||
|
//S
|
||||||
equlen = 12;
|
equlen = 12;
|
||||||
} else if (bb[pos] == 0x50) { //P
|
} else if (bb[pos] == 0x50) {
|
||||||
|
//P
|
||||||
equlen = 12;
|
equlen = 12;
|
||||||
} else if (bb[pos] == 0x54) { //T
|
} else if (bb[pos] == 0x54) {
|
||||||
|
//T
|
||||||
equlen = 16;
|
equlen = 16;
|
||||||
} else {
|
} else {
|
||||||
equlen = 12;
|
equlen = 12;
|
||||||
@ -114,7 +136,6 @@ class UDPTalkClass{
|
|||||||
return equid;
|
return equid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//播放本地音频
|
//播放本地音频
|
||||||
void playLocalAudio() async {
|
void playLocalAudio() async {
|
||||||
audioPlayer.setReleaseMode(ReleaseMode.loop);
|
audioPlayer.setReleaseMode(ReleaseMode.loop);
|
||||||
@ -126,4 +147,4 @@ class UDPTalkClass{
|
|||||||
audioPlayer.setReleaseMode(ReleaseMode.loop);
|
audioPlayer.setReleaseMode(ReleaseMode.loop);
|
||||||
await audioPlayer.stop();
|
await audioPlayer.stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,64 +6,70 @@ import '../main/lockDetail/lcokSet/lockSet/lockSetInfo_entity.dart';
|
|||||||
EventBus eventBus = EventBus();
|
EventBus eventBus = EventBus();
|
||||||
|
|
||||||
/// 刷新锁列表数据
|
/// 刷新锁列表数据
|
||||||
class RefreshLockListInfoDataEvent{
|
class RefreshLockListInfoDataEvent {
|
||||||
RefreshLockListInfoDataEvent();
|
RefreshLockListInfoDataEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 刷新考勤员工列表
|
/// 刷新考勤员工列表
|
||||||
class RefreshCheckInStaffListDataEvent{
|
class RefreshCheckInStaffListDataEvent {
|
||||||
RefreshCheckInStaffListDataEvent();
|
RefreshCheckInStaffListDataEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 传递当前锁信息
|
/// 传递当前锁信息
|
||||||
class PassCurrentLockInformationEvent{
|
class PassCurrentLockInformationEvent {
|
||||||
LockSetInfoData lockSetInfoData;
|
LockSetInfoData lockSetInfoData;
|
||||||
PassCurrentLockInformationEvent(this.lockSetInfoData);
|
PassCurrentLockInformationEvent(this.lockSetInfoData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 卡、密码、指纹修改之后刷新列表
|
/// 卡、密码、指纹修改之后刷新列表
|
||||||
class OtherTypeRefreshListEvent{
|
class OtherTypeRefreshListEvent {
|
||||||
OtherTypeRefreshListEvent();
|
OtherTypeRefreshListEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 考情添加员工卡、指纹之后回调卡、指纹number
|
/// 考情添加员工卡、指纹之后回调卡、指纹number
|
||||||
class ChickInAddStaffCardAndFingerprintBlockNumberEvent{
|
class ChickInAddStaffCardAndFingerprintBlockNumberEvent {
|
||||||
String number;
|
String number;
|
||||||
ChickInAddStaffCardAndFingerprintBlockNumberEvent(this.number);
|
ChickInAddStaffCardAndFingerprintBlockNumberEvent(this.number);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Uuid删除当前锁时 有可能锁被初始化了 但后台没被初始化 当打开APP的时候扫描如果未被连接就传uuid过去 判断直接删除数据
|
/// Uuid删除当前锁时 有可能锁被初始化了 但后台没被初始化 当打开APP的时候扫描如果未被连接就传uuid过去 判断直接删除数据
|
||||||
class ScanAllDeviceFindCurrentDeviceConnectedEvent{
|
class ScanAllDeviceFindCurrentDeviceConnectedEvent {
|
||||||
String uuid;
|
String uuid;
|
||||||
ScanAllDeviceFindCurrentDeviceConnectedEvent(this.uuid);
|
ScanAllDeviceFindCurrentDeviceConnectedEvent(this.uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 多语言 切换之后传值到上一级界面
|
/// 多语言 切换之后传值到上一级界面
|
||||||
class ChangeLanguageBlockLastLanguageEvent{
|
class ChangeLanguageBlockLastLanguageEvent {
|
||||||
String languageTitle;
|
String languageTitle;
|
||||||
ChangeLanguageBlockLastLanguageEvent(this.languageTitle);
|
ChangeLanguageBlockLastLanguageEvent(this.languageTitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 锁分组添加或者删除锁之后刷新首页数据
|
/// 锁分组添加或者删除锁之后刷新首页数据
|
||||||
class LockGroupEditGroupLockRefreshEvent{
|
class LockGroupEditGroupLockRefreshEvent {
|
||||||
LockGroupEditGroupLockRefreshEvent();
|
LockGroupEditGroupLockRefreshEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 锁设置里面开启关闭刷新锁详情
|
/// 锁设置里面开启关闭刷新锁详情
|
||||||
class LockSetChangeSetRefreshLockDetailWithType{
|
class LockSetChangeSetRefreshLockDetailWithType {
|
||||||
int type;// 0 考勤 1开锁时是否需联网
|
int type; // 0 考勤 1开锁时是否需联网
|
||||||
int setResult;
|
int setResult;
|
||||||
LockSetChangeSetRefreshLockDetailWithType(this.type, this.setResult);
|
LockSetChangeSetRefreshLockDetailWithType(this.type, this.setResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 获取到视频流数据然后刷新界面
|
/// 获取到视频流数据然后刷新界面
|
||||||
class GetTVDataRefreshUI{
|
class GetTVDataRefreshUI {
|
||||||
List<int> tvList;
|
List<int> tvList;
|
||||||
GetTVDataRefreshUI(this.tvList);
|
GetTVDataRefreshUI(this.tvList);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 获取到UDP接收状态然后刷新界面
|
/// 获取到UDP接收状态然后刷新界面
|
||||||
class GetUDPStatusRefreshUI{
|
class GetUDPStatusRefreshUI {
|
||||||
int udpStatus;
|
int udpStatus;
|
||||||
GetUDPStatusRefreshUI(this.udpStatus);
|
GetUDPStatusRefreshUI(this.udpStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 获取到第一帧图片数据后跳转
|
||||||
|
class GetFirstFrameGoPush {
|
||||||
|
bool isFirstFrame;
|
||||||
|
GetFirstFrameGoPush(this.isFirstFrame);
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user