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:
魏少阳 2023-12-21 10:32:10 +08:00
commit 5f9e061ee3
10 changed files with 270 additions and 14367 deletions

View File

@ -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

View File

@ -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 = {

View File

@ -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"

View File

@ -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();
} }
}
}

View File

@ -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();
}
} }

View File

@ -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音频数据来啦啦啦啦啦啦啦啦啦');
// 711Uint8List // 711Uint8List
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();
} }

View File

@ -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();
} }
} }

View File

@ -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();
} }
} }

View File

@ -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);
}