From 366daf69c563b7b4939b84102149dbcf28c1575d Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Fri, 12 Apr 2024 14:03:52 +0800 Subject: [PATCH] =?UTF-8?q?1=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=BD=95=E9=9F=B3?= =?UTF-8?q?=E4=B8=AD=E4=B8=8D=E6=92=AD=E6=94=BE=E9=94=81=E5=8F=91=E8=BF=87?= =?UTF-8?q?=E6=9D=A5=E7=9A=84=E5=A3=B0=E9=9F=B3=E9=80=BB=E8=BE=91=202?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E8=A7=86=E9=A2=91=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E7=9A=84=E9=80=BB=E8=BE=91=E5=87=8F=E5=B0=91?= =?UTF-8?q?=E7=99=BD=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../monitoring/lockMonitoring_logic.dart | 24 +----- .../monitoring/lockMonitoring_page.dart | 78 +++++++++++++++---- .../monitoring/lockMonitoring_state.dart | 2 + .../realTimePicture_logic.dart | 2 +- star_lock/lib/talk/call/callTalk.dart | 3 +- star_lock/lib/talk/udp/udp_reciverData.dart | 2 +- star_lock/lib/talk/udp/udp_talkClass.dart | 2 +- 7 files changed, 72 insertions(+), 41 deletions(-) diff --git a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart index be08e520..a850c251 100644 --- a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart +++ b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart @@ -21,22 +21,6 @@ class LockMonitoringLogic extends BaseGetXController { state.voiceProcessor = VoiceProcessor.instance; } - /// 收到视频流数据 - StreamSubscription? _getTVDataRefreshUIEvent; - void _getTVDataRefreshUIAction() { - // 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus - _getTVDataRefreshUIEvent = - eventBus.on().listen((event) async { - if (event.tvList.isNotEmpty) { - // print('收到图片了啦啦啦啦啦啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊'); - // 预加载图片数据 - Uint8List imageData = Uint8List.fromList(event.tvList); - // 更新状态 - state.listPhotoData.value = imageData; - } - }); - } - /// 收到UDP发送的状态 StreamSubscription? _getUDPStatusRefreshUIEvent; void _getUDPStatusRefreshUIAction() { @@ -164,6 +148,7 @@ class LockMonitoringLogic extends BaseGetXController { //开始录音 Future startProcessing() async { + CallTalk().finishPcmSound(); state.isButtonDisabled.value = true; state.voiceProcessor?.addFrameListener(_onFrame); @@ -407,9 +392,7 @@ class LockMonitoringLogic extends BaseGetXController { void onReady() { // TODO: implement onReady super.onReady(); - print("onReady()"); - _getTVDataRefreshUIAction(); _getUDPStatusRefreshUIAction(); initRecorder(); @@ -425,10 +408,11 @@ class LockMonitoringLogic extends BaseGetXController { void onClose() { // TODO: implement onClose print("锁详情界面销毁了"); - CallTalk().stopPcmSound(); + CallTalk().finishPcmSound(); stopProcessing(); - _getTVDataRefreshUIEvent!.cancel(); _getUDPStatusRefreshUIEvent!.cancel(); + state.getTVDataRefreshUIEvent!.cancel(); + if (state.oneMinuteTimeTimer != null) { state.oneMinuteTimeTimer.cancel(); state.oneMinuteTime.value = 0; diff --git a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart index 8d5bc8ae..bc040719 100644 --- a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart +++ b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:io'; import 'dart:ui' as ui; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; @@ -11,6 +12,7 @@ import 'package:image_gallery_saver/image_gallery_saver.dart'; import 'package:path_provider/path_provider.dart'; import 'package:star_lock/talk/call/callTalk.dart'; import 'package:star_lock/talk/udp/udp_manage.dart'; +import 'package:star_lock/tools/eventBusEventManage.dart'; import '../../../../app_settings/app_colors.dart'; import '../../../../login/selectCountryRegion/common/index.dart'; @@ -32,6 +34,7 @@ class _LockMonitoringPageState extends State { void initState() { super.initState(); initAsync(); + _getTVDataRefreshUIAction(); } Future initAsync() async { @@ -50,23 +53,33 @@ class _LockMonitoringPageState extends State { // color: Colors.white, child: Stack( children: [ - Obx(() { - if (state.listPhotoData.value.isEmpty || - state.listPhotoData.value.length < 10) { + Image.memory( + state.listPhotoData.value, + gaplessPlayback: true, + width: 1.sw, + height: 1.sh, + fit: BoxFit.cover, + errorBuilder: (context, error, stackTrace) { return Container(color: Colors.transparent); - } else { - return Image.memory( - state.listPhotoData.value, - gaplessPlayback: true, - width: 1.sw, - height: 1.sh, - fit: BoxFit.cover, - errorBuilder: (context, error, stackTrace) { - return Container(color: Colors.transparent); - }, - ); - } - }), + }, + ), + // Obx(() { + // if (state.listPhotoData.value.isEmpty || + // state.listPhotoData.value.length < 10) { + // return Container(color: Colors.transparent); + // } else { + // return Image.memory( + // state.listPhotoData.value, + // gaplessPlayback: true, + // width: 1.sw, + // height: 1.sh, + // fit: BoxFit.cover, + // errorBuilder: (context, error, stackTrace) { + // return Container(color: Colors.transparent); + // }, + // ); + // } + // }), Positioned( top: ScreenUtil().statusBarHeight + 30.h, width: 1.sw, @@ -220,7 +233,7 @@ class _LockMonitoringPageState extends State { bottomBtnItemWidget( "images/main/icon_lockDetail_hangUp.png", "挂断", Colors.red, () async { logic.stopProcessing(); - CallTalk().stopPcmSound(); + CallTalk().finishPcmSound(); // 挂断 if (state.isClickHangUp.value == false) { logic.initiateUdpHangUpAction(3); @@ -387,9 +400,40 @@ class _LockMonitoringPageState extends State { } } + /// 收到视频流数据 + void _getTVDataRefreshUIAction() { + // 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus + state.getTVDataRefreshUIEvent = + eventBus.on().listen((event) async { + if (event.tvList.isNotEmpty && event.tvList.length > 100) { + // 比较新旧数据是否相同 + Uint8List imageData = Uint8List.fromList(event.tvList); + + if (!listEquals(state.listPhotoData.value, imageData)) { + // 更新状态 + state.listPhotoData.value = imageData; + // 设置标志为true,表示需要更新UI + state.shouldUpdateUI.value = true; + // WidgetsBinding.instance.addPostFrameCallback((_) { + // print('addPostFrameCallback'); + // 调用setState方法之前检查标志,只有当标志为true时才更新UI + if (state.shouldUpdateUI.value) { + setState(() { + // 更新UI + }); + // 更新完UI后将标志重新设置为false + state.shouldUpdateUI.value = false; + } + // }); + } + } + }); + } + @override void dispose() { super.dispose(); logic.stopProcessing(); + state.getTVDataRefreshUIEvent!.cancel(); } } diff --git a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart index 90c14f8a..8a169677 100644 --- a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart +++ b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart @@ -12,6 +12,8 @@ class LockMonitoringState { var isOpenVoice = false.obs; int udpSendDataFrameNumber = 0; // 帧序号 // var isSenderAudioData = false.obs;// 是否要发送音频数据 + StreamSubscription? getTVDataRefreshUIEvent; //收到视频流数据 + var shouldUpdateUI = false.obs; //是否需要更新UI var userMobileIP = NetworkInfo().getWifiIP(); var userUid = Storage.getUid(); diff --git a/star_lock/lib/main/lockDetail/realTimePicture/realTimePicture_logic.dart b/star_lock/lib/main/lockDetail/realTimePicture/realTimePicture_logic.dart index d963ee48..8b96f863 100644 --- a/star_lock/lib/main/lockDetail/realTimePicture/realTimePicture_logic.dart +++ b/star_lock/lib/main/lockDetail/realTimePicture/realTimePicture_logic.dart @@ -318,7 +318,7 @@ class RealTimePictureLogic extends BaseGetXController { void onClose() { // TODO: implement onClose print("锁详情界面销毁了"); - CallTalk().stopPcmSound(); + CallTalk().finishPcmSound(); _getTVDataRefreshUIEvent!.cancel(); _getUDPStatusRefreshUIEvent!.cancel(); if (state.oneMinuteTimeTimer != null) { diff --git a/star_lock/lib/talk/call/callTalk.dart b/star_lock/lib/talk/call/callTalk.dart index 6b9c8838..e2455a54 100644 --- a/star_lock/lib/talk/call/callTalk.dart +++ b/star_lock/lib/talk/call/callTalk.dart @@ -146,11 +146,12 @@ class CallTalk { } //停止接收音频数据 - void stopPcmSound() { + void finishPcmSound() { // FlutterPcmSound.setup(sampleRate: 8000, channelCount: 1); FlutterPcmSound.pause(); FlutterPcmSound.clear(); FlutterPcmSound.stop(); + print('已停止播放声音'); iframe = IframeInfo(); iframe!.iframeIndex = 0; diff --git a/star_lock/lib/talk/udp/udp_reciverData.dart b/star_lock/lib/talk/udp/udp_reciverData.dart index 49da0cf5..631cb774 100644 --- a/star_lock/lib/talk/udp/udp_reciverData.dart +++ b/star_lock/lib/talk/udp/udp_reciverData.dart @@ -203,7 +203,7 @@ class CommandUDPReciverManager { break; case 30: { - CallTalk().stopPcmSound(); + CallTalk().finishPcmSound(); // 监视结束 if ((data[7] & 0x3) == 1) { diff --git a/star_lock/lib/talk/udp/udp_talkClass.dart b/star_lock/lib/talk/udp/udp_talkClass.dart index 810b8dc6..dac2e50d 100644 --- a/star_lock/lib/talk/udp/udp_talkClass.dart +++ b/star_lock/lib/talk/udp/udp_talkClass.dart @@ -188,7 +188,7 @@ class UDPTalkClass { isBeCall = false; // isEndCall = true; // LockMonitoringState().isClickHangUp.value = false; - CallTalk().stopPcmSound(); + CallTalk().finishPcmSound(); eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status)); Get.back();