From 807c71b614abbb21813c2009be84e083a10d560e Mon Sep 17 00:00:00 2001 From: liyi Date: Thu, 10 Apr 2025 18:16:48 +0800 Subject: [PATCH 01/11] =?UTF-8?q?fix:=E5=9B=BA=E5=AE=9A=E4=B8=BA20?= =?UTF-8?q?=E9=92=88=E7=BC=93=E5=86=B2=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/talkView/talk_view_logic.dart | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/lib/talk/starChart/views/talkView/talk_view_logic.dart b/lib/talk/starChart/views/talkView/talk_view_logic.dart index 05d0636c..d4fd18f5 100644 --- a/lib/talk/starChart/views/talkView/talk_view_logic.dart +++ b/lib/talk/starChart/views/talkView/talk_view_logic.dart @@ -39,7 +39,7 @@ class TalkViewLogic extends BaseGetXController { final int minBufferSize = 2; // 最小缓冲2帧,约166ms final int maxBufferSize = 8; // 最大缓冲8帧,约666ms - int bufferSize = 3; // 初始化为默认大小 + int bufferSize = 20; // 初始化为默认大小 // 修改音频相关的成员变量 final int minAudioBufferSize = 1; // 音频最小缓冲1帧 final int maxAudioBufferSize = 3; // 音频最大缓冲3帧 @@ -137,11 +137,11 @@ class TalkViewLogic extends BaseGetXController { } // AppLog.log('其他帧的时间戳:${talkData.durationMs}'); // 计算帧间间隔 - if (_lastFrameTimestamp != 0) { - final int frameInterval = talkData.durationMs - _lastFrameTimestamp; - _adjustBufferSize(frameInterval); // 根据帧间间隔调整缓冲区 - } - _lastFrameTimestamp = talkData.durationMs; // 更新上一帧时间戳 + // if (_lastFrameTimestamp != 0) { + // final int frameInterval = talkData.durationMs - _lastFrameTimestamp; + // _adjustBufferSize(frameInterval); // 根据帧间间隔调整缓冲区 + // } + // _lastFrameTimestamp = talkData.durationMs; // 更新上一帧时间戳 // 然后添加到播放缓冲区 if (state.videoBuffer.length >= bufferSize) { @@ -185,16 +185,16 @@ class TalkViewLogic extends BaseGetXController { state.videoBuffer.removeAt(oldestIndex); // 移除已播放的帧 // 更新帧率计算 - _frameCount++; - final currentTime = DateTime.now().millisecondsSinceEpoch; - final elapsed = currentTime - _lastFpsUpdateTime; - - if (elapsed >= 1000) { - // 每秒更新一次 - state.fps.value = (_frameCount * 1000 / elapsed).round(); - _frameCount = 0; - _lastFpsUpdateTime = currentTime; - } + // _frameCount++; + // final currentTime = DateTime.now().millisecondsSinceEpoch; + // final elapsed = currentTime - _lastFpsUpdateTime; + // + // if (elapsed >= 1000) { + // // 每秒更新一次 + // state.fps.value = (_frameCount * 1000 / elapsed).round(); + // _frameCount = 0; + // _lastFpsUpdateTime = currentTime; + // } // AppLog.log('🎬 播放帧 - 缓冲区剩余: ${state.videoBuffer.length}/${bufferSize}, ' // '播放延迟: ${currentTime - oldestFrame.durationMs}ms, ' // '帧时间戳: ${oldestFrame.durationMs}'); From c4191dbc95559b48e6c07b02f0729ebb415cd9c5 Mon Sep 17 00:00:00 2001 From: liyi Date: Fri, 11 Apr 2025 10:06:09 +0800 Subject: [PATCH 02/11] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=8D=A1=E7=89=87=E6=97=B6=E4=BC=9A=E5=88=B7=E6=96=B0=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E5=88=97=E8=A1=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../card/cardList/cardList_logic.dart | 27 +++++++++---- .../card/cardList/cardList_page.dart | 40 +++++++++---------- 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/lib/main/lockDetail/card/cardList/cardList_logic.dart b/lib/main/lockDetail/card/cardList/cardList_logic.dart index a11cd18c..022ff0fb 100755 --- a/lib/main/lockDetail/card/cardList/cardList_logic.dart +++ b/lib/main/lockDetail/card/cardList/cardList_logic.dart @@ -28,6 +28,7 @@ class CardListLogic extends BaseGetXController { // 获取解析后的数据 late StreamSubscription _replySubscription; + void _initReplySubscription() { _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) { @@ -69,11 +70,15 @@ class CardListLogic extends BaseGetXController { userID: (await Storage.getUid())!, cardNo: state.deletCardNo, useCountLimit: 0xffff, - operate: state.isDeletAll == true ? 3 : 2, // 0:注册 1:修改 2:删除 3:删除全部 + operate: state.isDeletAll == true ? 3 : 2, + // 0:注册 1:修改 2:删除 3:删除全部 isAdmin: 0, - isForce: 0, // 是否是胁迫 - isRound: 0, // 是否是循环 - weekRound: 0, // 周循环 + isForce: 0, + // 是否是胁迫 + isRound: 0, + // 是否是循环 + weekRound: 0, + // 周循环 startDate: 0x11223344, endDate: 0x11223344, startTime: '0', @@ -116,11 +121,15 @@ class CardListLogic extends BaseGetXController { userID: (await Storage.getUid())!, cardNo: state.deletCardNo, useCountLimit: 0xffff, - operate: state.isDeletAll == true ? 3 : 2, // 0:注册 1:修改 2:删除 3:删除全部 + operate: state.isDeletAll == true ? 3 : 2, + // 0:注册 1:修改 2:删除 3:删除全部 isAdmin: 0, - isForce: 0, // 是否是胁迫 - isRound: 0, // 是否是循环 - weekRound: 0, // 周循环 + isForce: 0, + // 是否是胁迫 + isRound: 0, + // 是否是循环 + weekRound: 0, + // 周循环 startDate: 0x11223344, endDate: 0x11223344, startTime: '0', @@ -193,6 +202,7 @@ class CardListLogic extends BaseGetXController { // 监听修改完详情之后刷新列表 late StreamSubscription _teamEvent; + void _initRefreshAction() { _teamEvent = eventBus .on() @@ -240,6 +250,7 @@ class CardListLogic extends BaseGetXController { _initRefreshAction(); } + await getICCardListData(isRefresh: true); } @override diff --git a/lib/main/lockDetail/card/cardList/cardList_page.dart b/lib/main/lockDetail/card/cardList/cardList_page.dart index 705d5c8c..f5fe77e1 100755 --- a/lib/main/lockDetail/card/cardList/cardList_page.dart +++ b/lib/main/lockDetail/card/cardList/cardList_page.dart @@ -31,24 +31,24 @@ class _CardListPageState extends State with RouteAware { final CardListLogic logic = Get.put(CardListLogic()); final CardListState state = Get.find().state; - Future getHttpData({required bool isRefresh}) async { - final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); - if (isDemoMode == false) { - logic - .getICCardListData(isRefresh: isRefresh) - .then((FingerprintListDataEntity value) { - if (mounted) { - setState(() {}); - } - }); - } - } + // Future logic.getICCardListData({required bool isRefresh}) async { + // final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + // if (isDemoMode == false) { + // logic + // .getICCardListData(isRefresh: isRefresh) + // .then((FingerprintListDataEntity value) { + // if (mounted) { + // setState(() {}); + // } + // }); + // } + // } @override void initState() { super.initState(); - getHttpData(isRefresh: true); + // logic.getICCardListData(isRefresh: true); } @override @@ -92,17 +92,17 @@ class _CardListPageState extends State with RouteAware { ), body: EasyRefreshTool( onRefresh: () { - getHttpData(isRefresh: true); + logic.getICCardListData(isRefresh: true); }, onLoad: () { - getHttpData(isRefresh: false); + logic.getICCardListData(isRefresh: false); }, child: Column( children: [ KeySearchWidget( editingController: state.searchController, onSubmittedAction: () { - getHttpData(isRefresh: true); + logic.getICCardListData(isRefresh: true); }, ), SizedBox(height: 20.h), @@ -115,10 +115,10 @@ class _CardListPageState extends State with RouteAware { 'fromType': 1 // 1从添加钥匙列表进入 2从考勤添加员工入口进入 })! .then((value) { - getHttpData(isRefresh: true); + logic.getICCardListData(isRefresh: true); }); // if (data != null) { - // getHttpData(isRefresh: true); + // logic.getICCardListData(isRefresh: true); // } }, ), @@ -180,9 +180,9 @@ class _CardListPageState extends State with RouteAware { arguments: { 'fingerprintItemData': fingerprintItemData, })! - .then((value) => getHttpData(isRefresh: true)); + .then((value) => logic.getICCardListData(isRefresh: true)); // if (data != null) { - // getHttpData(isRefresh: true); + // logic.getICCardListData(isRefresh: true); // } }), ); From c9690430f70e86c07c5552ec62eeb36313ac8af1 Mon Sep 17 00:00:00 2001 From: liyi Date: Tue, 15 Apr 2025 16:01:16 +0800 Subject: [PATCH 03/11] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98=E5=B7=B2=E6=BB=A1=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lockDetail/card/addICCard/addICCard_logic.dart | 11 ++++++++++- lib/main/lockDetail/face/addFace/addFace_logic.dart | 12 +++++++++--- .../addFingerprint/addFingerprint_logic.dart | 9 ++++++--- lib/main/lockDetail/palm/addPalm/addPalm_logic.dart | 7 +++++++ .../addRemoteControl/addRemoteControl_logic.dart | 8 ++++++++ 5 files changed, 40 insertions(+), 7 deletions(-) diff --git a/lib/main/lockDetail/card/addICCard/addICCard_logic.dart b/lib/main/lockDetail/card/addICCard/addICCard_logic.dart index dda931b0..2729347b 100755 --- a/lib/main/lockDetail/card/addICCard/addICCard_logic.dart +++ b/lib/main/lockDetail/card/addICCard/addICCard_logic.dart @@ -80,7 +80,7 @@ class AddICCardLogic extends BaseGetXController { final List token = reply.data.sublist(5, 9); final List saveStrList = changeIntListToStringList(token); Storage.setStringList(saveBlueToken, saveStrList); - // AppLog.log('添加卡token:$token'); + AppLog.log('添加卡token:$token'); IoSenderManage.senderAddCardWithTimeCycleCoercionCommand( keyID: '1', @@ -107,6 +107,14 @@ class AddICCardLogic extends BaseGetXController { token: token, isBeforeAddUser: false); break; + case 0xFE: + case 12: + // 管理员已满 + state.ifAddState.value = false; + showToast('管理员已满'.tr, something: () { + Get.back(); + }); + break; default: //失败 state.ifAddState.value = false; @@ -146,6 +154,7 @@ class AddICCardLogic extends BaseGetXController { Get.close(1); break; case 0xFE: + case 0x12: // 管理员已满 showToast('管理员已满'.tr); Get.close(1); diff --git a/lib/main/lockDetail/face/addFace/addFace_logic.dart b/lib/main/lockDetail/face/addFace/addFace_logic.dart index d7fe6bd3..5900580c 100755 --- a/lib/main/lockDetail/face/addFace/addFace_logic.dart +++ b/lib/main/lockDetail/face/addFace/addFace_logic.dart @@ -54,7 +54,7 @@ class AddFaceLogic extends BaseGetXController { // 最大图片数 state.maxRegCount.value = reply.data[11]; - // AppLog.log('人脸开始state.maxRegCount.value:${state.maxRegCount.value}'); + AppLog.log('人脸开始state.maxRegCount.value:${state.maxRegCount.value}'); break; case 0x06: //无权限 @@ -89,6 +89,12 @@ class AddFaceLogic extends BaseGetXController { isBeforeAddUser: false ); break; + case 0xFE: + case 12: + // 管理员已满 + showToast('管理员已满'.tr); + Get.close(1); + break; default: //失败 state.ifAddState.value = false; @@ -112,9 +118,9 @@ class AddFaceLogic extends BaseGetXController { Get.close(1); break; case 0xFE: + case 12: // 管理员已满 showToast('管理员已满'.tr); - state.ifAddState.value = false; Get.close(1); break; case 0xFD: @@ -138,7 +144,7 @@ class AddFaceLogic extends BaseGetXController { // 添加人脸中 // 当前注册数 state.regIndex.value = reply.data[6]; - // AppLog.log('注册人脸过程state.regIndex.value:${state.regIndex.value}'); + AppLog.log('注册人脸过程state.regIndex.value:${state.regIndex.value}'); break; } diff --git a/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart b/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart index 6bd97fb8..c5ff8d1c 100755 --- a/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart +++ b/lib/main/lockDetail/fingerprint/addFingerprint/addFingerprint_logic.dart @@ -106,6 +106,7 @@ class AddFingerprintLogic extends BaseGetXController { isBeforeAddUser: false); break; case 0xFE: + case 12: // 管理员已满 state.ifAddState.value = false; showToast('管理员已满'.tr, something: () { @@ -139,10 +140,12 @@ class AddFingerprintLogic extends BaseGetXController { Get.close(1); break; case 0xFE: - // 管理员已满 - showToast('管理员已满'.tr); + case 12: + // 管理员已满 state.ifAddState.value = false; - Get.close(1); + showToast('管理员已满'.tr, something: () { + Get.back(); + }); break; case 0xFD: // 用户已满 diff --git a/lib/main/lockDetail/palm/addPalm/addPalm_logic.dart b/lib/main/lockDetail/palm/addPalm/addPalm_logic.dart index 19ca548d..eb843a3a 100755 --- a/lib/main/lockDetail/palm/addPalm/addPalm_logic.dart +++ b/lib/main/lockDetail/palm/addPalm/addPalm_logic.dart @@ -90,6 +90,12 @@ class AddPalmLogic extends BaseGetXController { isBeforeAddUser: false ); break; + case 0xFE: + case 12: + // 管理员已满 + showToast('管理员已满'.tr); + Get.close(1); + break; default: //失败 state.ifAddState.value = false; @@ -111,6 +117,7 @@ class AddPalmLogic extends BaseGetXController { Get.close(1); break; case 0xFE: + case 12: // 管理员已满 showToast('管理员已满'.tr); Get.close(1); diff --git a/lib/main/lockDetail/remoteControl/addRemoteControl/addRemoteControl_logic.dart b/lib/main/lockDetail/remoteControl/addRemoteControl/addRemoteControl_logic.dart index 7916fd7e..35d5a10e 100644 --- a/lib/main/lockDetail/remoteControl/addRemoteControl/addRemoteControl_logic.dart +++ b/lib/main/lockDetail/remoteControl/addRemoteControl/addRemoteControl_logic.dart @@ -90,6 +90,13 @@ class AddRemoteControlLogic extends BaseGetXController{ isBeforeAddUser: false ); break; + case 0xFE: + case 12: + // 管理员已满 + showToast('管理员已满'.tr); + state.ifAddState.value = false; + Get.close(1); + break; default: //失败 state.ifAddState.value = false; @@ -110,6 +117,7 @@ class AddRemoteControlLogic extends BaseGetXController{ Get.close(1); break; case 0xFE: + case 0x12: // 管理员已满 showToast('管理员已满'.tr); Get.close(1); From 02d0bc49d329d813cd96448307c8519233b9ebd3 Mon Sep 17 00:00:00 2001 From: liyi Date: Wed, 16 Apr 2025 14:11:38 +0800 Subject: [PATCH 04/11] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E6=8C=87=E7=BA=B9?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=A4=9A=E4=B8=AA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fingerprint/fingerprintList/fingerprintList_logic.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/main/lockDetail/fingerprint/fingerprintList/fingerprintList_logic.dart b/lib/main/lockDetail/fingerprint/fingerprintList/fingerprintList_logic.dart index 09523db0..3c886df8 100755 --- a/lib/main/lockDetail/fingerprint/fingerprintList/fingerprintList_logic.dart +++ b/lib/main/lockDetail/fingerprint/fingerprintList/fingerprintList_logic.dart @@ -404,8 +404,8 @@ class FingerprintListLogic extends BaseGetXController { void _initRefreshAction() { _teamEvent = eventBus .on() - .listen((OtherTypeRefreshListEvent event) { - getFingerprintsListData(isRefresh: true); + .listen((OtherTypeRefreshListEvent event) async { + await getFingerprintsListData(isRefresh: true); }); } @@ -460,7 +460,7 @@ class FingerprintListLogic extends BaseGetXController { if (isDemoMode == false) { _initReplySubscription(); - _initRefreshAction(); + // _initRefreshAction(); getFingerprintsListData(isRefresh: true); } } From 2e340921c19b433caa18e7b40c95eb5d4d5f618a Mon Sep 17 00:00:00 2001 From: liyi Date: Wed, 16 Apr 2025 14:12:00 +0800 Subject: [PATCH 05/11] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E5=87=BA=E7=8E=B0?= =?UTF-8?q?=E4=B8=80=E9=94=AE=E7=99=BB=E5=BD=95=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/login/login/starLock_login_logic.dart | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/login/login/starLock_login_logic.dart b/lib/login/login/starLock_login_logic.dart index d0f5d2cd..a03eca9f 100755 --- a/lib/login/login/starLock_login_logic.dart +++ b/lib/login/login/starLock_login_logic.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:star_lock/apm/apm_helper.dart'; @@ -174,8 +176,10 @@ class StarLockLoginLogic extends BaseGetXController { state.canNext.value = state.pwdIsOK && state.isEmailOrPhone; } + late StreamSubscription _agreePrivacySubscription; + void _initEventListen() { - eventBus + _agreePrivacySubscription = eventBus .on() .listen((AgreePrivacyAgreement event) async { await JverifyOneClickLoginManage(); @@ -194,6 +198,8 @@ class StarLockLoginLogic extends BaseGetXController { @override void onClose() { + // 取消事件监听 + _agreePrivacySubscription.cancel(); state.onClose(); super.onClose(); } From 204affd6b1e217bdea2dbb600f86cde54a51d14f Mon Sep 17 00:00:00 2001 From: liyi Date: Wed, 16 Apr 2025 14:13:31 +0800 Subject: [PATCH 06/11] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E5=AF=86=E7=A0=81?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passwordKeyDetail/passwordKeyDetail_logic.dart | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/main/lockDetail/passwordKey/passwordKeyDetail/passwordKeyDetail_logic.dart b/lib/main/lockDetail/passwordKey/passwordKeyDetail/passwordKeyDetail_logic.dart index 04059392..33b2f2f7 100755 --- a/lib/main/lockDetail/passwordKey/passwordKeyDetail/passwordKeyDetail_logic.dart +++ b/lib/main/lockDetail/passwordKey/passwordKeyDetail/passwordKeyDetail_logic.dart @@ -152,6 +152,13 @@ class PasswordKeyDetailLogic extends BaseGetXController { final List? token = await Storage.getStringList(saveBlueToken); final List getTokenList = changeStringListToIntList(token!); + int startTime = 0; + int endTime = 0; + if (state.itemData.value.keyboardPwdType != 2) { + startTime = state.itemData.value.startDate! ~/ 1000; + endTime = state.itemData.value.endDate! ~/ 1000; + } + IoSenderManage.senderCustomPasswordsCommand( keyID: state.itemData.value.keyboardPwdId!.toString(), userID: await Storage.getUid(), @@ -162,8 +169,8 @@ class PasswordKeyDetailLogic extends BaseGetXController { ? (state.isDeletPasswordKey.value == true ? 2 : 1) : 3, isAdmin: state.isAdministrator.value == true ? 1 : 0, - startTime: state.itemData.value.startDate! ~/ 1000, - endTime: state.itemData.value.endDate! ~/ 1000, + startTime: startTime, + endTime: endTime, needAuthor: 1, isBeforeAddUser: false, signKey: signKeyDataList, From 7f2d591e674cb7b5993170538819a1f66d486e3c Mon Sep 17 00:00:00 2001 From: liyi Date: Wed, 16 Apr 2025 14:13:50 +0800 Subject: [PATCH 07/11] =?UTF-8?q?style:=E5=8E=BB=E9=99=A4=E5=A4=9A?= =?UTF-8?q?=E4=BD=99=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../addLock/nearbyLock/nearbyLock_logic.dart | 44 ------------------- 1 file changed, 44 deletions(-) diff --git a/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart b/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart index 05b499f0..75d52cf4 100755 --- a/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart +++ b/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart @@ -449,50 +449,6 @@ class NearbyLockLogic extends BaseGetXController { } } - /// 判断 128-bit UUID 是否已配对 - bool isPaired128Bit(String serviceUuid) { - if (serviceUuid.length != 36) return false; // 确保是 128-bit UUID - try { - String status = serviceUuid.substring(30, 32); // 获取第 31 和 32 位 - return status == '01'; // '01' 表示已配对 - } catch (e) { - return false; // 如果索引越界或其他错误,返回 false - } - } - - /// 判断 128-bit UUID 是否休眠 - bool isSleeping128Bit(String serviceUuid) { - if (serviceUuid.length != 36) return false; // 确保是 128-bit UUID - try { - String status = serviceUuid.substring(32, 34); // 获取第 33 和 34 位 - return status == '00'; // '00' 表示休眠 - } catch (e) { - return false; // 如果索引越界或其他错误,返回 false - } - } - - /// 判断 32-bit UUID 是否已配对 - bool isPaired32Bit(String serviceUuid) { - if (serviceUuid.length != 8) return false; // 确保是 32-bit UUID - try { - String status = serviceUuid.substring(3, 5); // 获取第 4 和 5 位 - return status == '01'; // '01' 表示已配对 - } catch (e) { - return false; // 如果索引越界或其他错误,返回 false - } - } - - /// 判断 32-bit UUID 是否休眠 - bool isSleeping32Bit(String serviceUuid) { - if (serviceUuid.length != 8) return false; // 确保是 32-bit UUID - try { - String status = serviceUuid.substring(5, 7); // 获取第 6 和 7 位 - return status == '00'; // '00' 表示休眠 - } catch (e) { - return false; // 如果索引越界或其他错误,返回 false - } - } - void stopScanBlueList() { BlueManage().disconnect(); BlueManage().stopScan(); From 084f887e899966bad33bc223fe9f11e4cad54579 Mon Sep 17 00:00:00 2001 From: liyi Date: Wed, 16 Apr 2025 14:14:06 +0800 Subject: [PATCH 08/11] =?UTF-8?q?style:=E8=B0=83=E6=95=B4=E4=B8=80?= =?UTF-8?q?=E9=94=AE=E7=99=BB=E5=BD=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/main.dart b/lib/main.dart index 9e9f5927..ee1c0ca7 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -106,7 +106,6 @@ Future privacySDKInitialization() async { // 初始化一键登录服务 final StarLockLoginLogic loginLogic = Get.put(StarLockLoginLogic()); await JverifyOneClickLoginManage(); - loginLogic.oneClickLoginAction(); loginLogic.state.isCheckVerifyEnable.value = await JverifyOneClickLoginManage().checkVerifyEnable(); eventBus.fire(AgreePrivacyAgreement()); From 4234464533ffa2425dda20f7901ad832a4b167d6 Mon Sep 17 00:00:00 2001 From: liyi Date: Wed, 16 Apr 2025 14:15:11 +0800 Subject: [PATCH 09/11] =?UTF-8?q?fix:=E5=A2=9E=E5=8A=A0=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E7=9B=91=E5=90=AC=E5=AF=B9=E5=BA=94=E5=8F=98=E9=87=8F=EF=BC=8C?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E5=90=8E=E7=BB=AD=E5=8F=96=E6=B6=88=E7=9B=91?= =?UTF-8?q?=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main/lockDetail/lockDetail/lockDetail_logic.dart | 4 ++-- lib/main/lockDetail/lockDetail/lockDetail_state.dart | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart index 80198af5..03b69a5b 100755 --- a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart +++ b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart @@ -814,7 +814,7 @@ class LockDetailLogic extends BaseGetXController { } }); - eventBus + state.DetailLockInfo = eventBus .on() .listen((PassCurrentLockInformationEvent event) { if (event.lockSetInfoData.lockSettingInfo != null && @@ -839,7 +839,7 @@ class LockDetailLogic extends BaseGetXController { } }); - eventBus + state.SuccessfulDistributionNetworkEvent = eventBus .on() .listen((SuccessfulDistributionNetwork event) { // 配网成功获取一下配网信息 diff --git a/lib/main/lockDetail/lockDetail/lockDetail_state.dart b/lib/main/lockDetail/lockDetail/lockDetail_state.dart index 760f1289..01178f52 100755 --- a/lib/main/lockDetail/lockDetail/lockDetail_state.dart +++ b/lib/main/lockDetail/lockDetail/lockDetail_state.dart @@ -14,6 +14,8 @@ class LockDetailState { late StreamSubscription replySubscription; StreamSubscription? lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent; StreamSubscription? LockSetChangeSetRefreshLockDetailWithTypeSubscription; + StreamSubscription? DetailLockInfo; + StreamSubscription? SuccessfulDistributionNetworkEvent; String lockNetToken = '0'; int differentialTime = 0;// 服务器时间与本地时间差值 From a259ed9dd3d6e9ec3d6ccf4c896efdbd0c1f9251 Mon Sep 17 00:00:00 2001 From: liyi Date: Wed, 16 Apr 2025 14:16:27 +0800 Subject: [PATCH 10/11] =?UTF-8?q?fix:=E5=A2=9E=E5=8A=A0=E7=BC=93=E5=86=B2?= =?UTF-8?q?=E5=8C=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handle/other/talk_data_repository.dart | 28 ++----------------- .../views/talkView/talk_view_logic.dart | 21 +++++++------- 2 files changed, 13 insertions(+), 36 deletions(-) diff --git a/lib/talk/starChart/handle/other/talk_data_repository.dart b/lib/talk/starChart/handle/other/talk_data_repository.dart index 864aa4aa..062835cb 100644 --- a/lib/talk/starChart/handle/other/talk_data_repository.dart +++ b/lib/talk/starChart/handle/other/talk_data_repository.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'package:star_lock/talk/starChart/proto/talk_data.pb.dart'; class TalkDataRepository { - // 创建一个私有的构造函数,防止外部创建实例 TalkDataRepository._() { _talkDataStreamController = StreamController.broadcast( onListen: () { @@ -11,47 +10,26 @@ class TalkDataRepository { onCancel: () { _isListening = false; }, - sync: false, // 异步模式 + sync: false, // 改为同步模式以提高实时性 ); } - // 使用 _instance 来保存单例对象 static final TalkDataRepository _instance = TalkDataRepository._(); - // 提供一个静态方法来获取单例实例 static TalkDataRepository get instance => _instance; - // 创建一个 StreamController late final StreamController _talkDataStreamController; - bool _isListening = false; - // 用于存储数据的缓冲区 - final List _buffer = []; + // 直接返回原始流,不做转换 + Stream get talkDataStream => _talkDataStreamController.stream; - // 提供一个方法来获取 Stream - Stream get talkDataStream => - _talkDataStreamController.stream.transform( - StreamTransformer.fromHandlers( - handleData: (TalkData data, EventSink sink) { - // 限制缓冲区大小为 100 - if (_buffer.length >= 100) { - _buffer.removeAt(0); // 丢弃最旧的数据 - } - _buffer.add(data); - sink.add(data); - }, - ), - ); - - // 提供一个方法来添加 TalkData 到 Stream void addTalkData(TalkData talkData) { if (_isListening) { _talkDataStreamController.add(talkData); } } - // 提供一个方法来关闭 StreamController void dispose() { _talkDataStreamController.close(); } diff --git a/lib/talk/starChart/views/talkView/talk_view_logic.dart b/lib/talk/starChart/views/talkView/talk_view_logic.dart index d4fd18f5..779e44e9 100644 --- a/lib/talk/starChart/views/talkView/talk_view_logic.dart +++ b/lib/talk/starChart/views/talkView/talk_view_logic.dart @@ -38,8 +38,8 @@ class TalkViewLogic extends BaseGetXController { final LockDetailState lockDetailState = Get.put(LockDetailLogic()).state; final int minBufferSize = 2; // 最小缓冲2帧,约166ms - final int maxBufferSize = 8; // 最大缓冲8帧,约666ms - int bufferSize = 20; // 初始化为默认大小 + final int maxBufferSize = 20; // 最大缓冲8帧,约666ms + int bufferSize = 8; // 初始化为默认大小 // 修改音频相关的成员变量 final int minAudioBufferSize = 1; // 音频最小缓冲1帧 final int maxAudioBufferSize = 3; // 音频最大缓冲3帧 @@ -137,11 +137,11 @@ class TalkViewLogic extends BaseGetXController { } // AppLog.log('其他帧的时间戳:${talkData.durationMs}'); // 计算帧间间隔 - // if (_lastFrameTimestamp != 0) { - // final int frameInterval = talkData.durationMs - _lastFrameTimestamp; - // _adjustBufferSize(frameInterval); // 根据帧间间隔调整缓冲区 - // } - // _lastFrameTimestamp = talkData.durationMs; // 更新上一帧时间戳 + if (_lastFrameTimestamp != 0) { + final int frameInterval = talkData.durationMs - _lastFrameTimestamp; + _adjustBufferSize(frameInterval); // 根据帧间间隔调整缓冲区 + } + _lastFrameTimestamp = talkData.durationMs; // 更新上一帧时间戳 // 然后添加到播放缓冲区 if (state.videoBuffer.length >= bufferSize) { @@ -184,7 +184,7 @@ class TalkViewLogic extends BaseGetXController { state.listData.value = Uint8List.fromList(oldestFrame.content); state.videoBuffer.removeAt(oldestIndex); // 移除已播放的帧 - // 更新帧率计算 + // // 更新帧率计算 // _frameCount++; // final currentTime = DateTime.now().millisecondsSinceEpoch; // final elapsed = currentTime - _lastFpsUpdateTime; @@ -195,9 +195,7 @@ class TalkViewLogic extends BaseGetXController { // _frameCount = 0; // _lastFpsUpdateTime = currentTime; // } - // AppLog.log('🎬 播放帧 - 缓冲区剩余: ${state.videoBuffer.length}/${bufferSize}, ' - // '播放延迟: ${currentTime - oldestFrame.durationMs}ms, ' - // '帧时间戳: ${oldestFrame.durationMs}'); + } else { // AppLog.log('⚠️ 帧未找到缓存 - Key: $cacheKey'); state.videoBuffer.removeAt(oldestIndex); // 移除无法播放的帧 @@ -499,6 +497,7 @@ class TalkViewLogic extends BaseGetXController { _initAudioRecorder(); requestPermissions(); + } @override From 50944a082b088532849bb2d73c9c2a0e14b816ac Mon Sep 17 00:00:00 2001 From: liyi Date: Wed, 16 Apr 2025 14:28:18 +0800 Subject: [PATCH 11/11] =?UTF-8?q?fix:=E8=B0=83=E6=95=B4=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=90=8E=E4=B8=AD=E6=96=AD=E6=8C=81=E7=BB=AD=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/talk/starChart/star_chart_manage.dart | 44 ++++++++++++----------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/lib/talk/starChart/star_chart_manage.dart b/lib/talk/starChart/star_chart_manage.dart index 7f60fc25..0e0e9eb8 100644 --- a/lib/talk/starChart/star_chart_manage.dart +++ b/lib/talk/starChart/star_chart_manage.dart @@ -595,27 +595,31 @@ class StartChartManage { // 发送拒绝接听消息 void startTalkRejectMessageTimer() async { - talkRejectTimer ??= Timer.periodic( - Duration(seconds: _defaultIntervalTime), - (Timer timer) async { - _sendTalkRejectMessage(); - }, - ); + try { + talkRejectTimer ??= Timer.periodic( + Duration(seconds: _defaultIntervalTime), + (Timer timer) async { + _sendTalkRejectMessage(); + }, + ); + } catch (e) { + AppLog.log("startTalkRejectMessageTimer e:${e}"); + } finally { + // 设置状态为拒绝 + StartChartTalkStatus.instance.setRejected(); + // 停止播放铃声 + AudioPlayerManager().stopRingtone(); + // 停止发送通话保持消息、通话预期数据请求 + stopTalkExpectMessageTimer(); + stopTalkPingMessageTimer(); + stopCallRequestMessageTimer(); + stopSendingRbcuInfoMessages(); + stopSendingRbcuProBeMessages(); + // 取消定时器 - // 设置状态为拒绝 - StartChartTalkStatus.instance.setRejected(); - // 停止播放铃声 - AudioPlayerManager().stopRingtone(); - // 停止发送通话保持消息、通话预期数据请求 - stopTalkExpectMessageTimer(); - stopTalkPingMessageTimer(); - stopCallRequestMessageTimer(); - stopSendingRbcuInfoMessages(); - stopSendingRbcuProBeMessages(); - // 取消定时器 - - talkePingOverTimeTimerManager.cancel(); - talkDataOverTimeTimerManager.cancel(); + talkePingOverTimeTimerManager.cancel(); + talkDataOverTimeTimerManager.cancel(); + } } // 发送期望接受消息