From 617c7ad9b62b3c517d58775b33ae8ef425386f54 Mon Sep 17 00:00:00 2001 From: liyi Date: Mon, 28 Jul 2025 15:58:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=A2=9E=E5=8A=A0=E5=8F=91=E9=80=81?= =?UTF-8?q?=E8=BF=87=E7=A8=8B=E4=B8=AD=E8=B6=85=E6=97=B6=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../speech_language_settings_logic.dart | 42 ++++++++++++++++++- .../lock_voice_setting_logic.dart | 33 +++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/lib/main/lockDetail/lockSet/speechLanguageSettings/speech_language_settings_logic.dart b/lib/main/lockDetail/lockSet/speechLanguageSettings/speech_language_settings_logic.dart index 8a75a1bd..4422954f 100644 --- a/lib/main/lockDetail/lockSet/speechLanguageSettings/speech_language_settings_logic.dart +++ b/lib/main/lockDetail/lockSet/speechLanguageSettings/speech_language_settings_logic.dart @@ -34,6 +34,12 @@ class SpeechLanguageSettingsLogic extends BaseGetXController { final SpeechLanguageSettingsState state = SpeechLanguageSettingsState(); StreamSubscription? _replySubscription; +// 超时定时器(用于检测是否未收到回复) + Timer? _sendTimeoutTimer; + +// 超时标志位(可选,防止重复处理) + bool _isTimeout = false; + @override void onInit() async { super.onInit(); @@ -273,7 +279,39 @@ class SpeechLanguageSettingsLogic extends BaseGetXController { _sendNextPackage(); } + void _handleSendTimeout() { + _isTimeout = true; // 标记超时状态 + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + showBlueConnetctToast(); + + // 重置状态,避免后续错误操作 + state.voiceSubcontractingIndex = 0; + state.voiceSubcontractingCount = 0; + state.data = null; + state.progress.value = 0.0; + _isTimeout = false; // 标记超时状态 + } + void _sendNextPackage() async { + // 若已超时,直接返回 + if (_isTimeout) return; + + // 取消上一次未完成的定时器(避免重复触发) + _sendTimeoutTimer?.cancel(); + + // 检查是否已完成所有分包发送 + if (state.voiceSubcontractingIndex >= state.voiceSubcontractingCount) { + print('所有分包已发送完成'); + state.progress.value = 1.0; + return; + } + + // 启动 3 秒超时定时器 + _sendTimeoutTimer = Timer(Duration(seconds: 3), () { + _handleSendTimeout(); // 触发超时处理 + }); + if (state.voiceSubcontractingIndex >= state.voiceSubcontractingCount) { print('所有分包已发送完成'); state.progress.value = 1.0; // 发送完成 @@ -320,6 +358,9 @@ class SpeechLanguageSettingsLogic extends BaseGetXController { void _handlerVoicePackageConfigureProcess( VoicePackageConfigureProcessReply reply) { + // 取消超时定时器(已收到回复,无需继续等待) + _sendTimeoutTimer?.cancel(); + _isTimeout = false; // 重置超时标志 final int status = reply.data[2]; switch (status) { case 0x00: @@ -386,7 +427,6 @@ class SpeechLanguageSettingsLogic extends BaseGetXController { Future _executeLogic( VoicePackageConfigureConfirmationReply reply) async { await _handlerVoicePackageConfigureConfirmation(reply); - dismissEasyLoading(); } _handlerVoicePackageConfigureConfirmation( diff --git a/lib/mine/addLock/lock_voice_setting/lock_voice_setting_logic.dart b/lib/mine/addLock/lock_voice_setting/lock_voice_setting_logic.dart index dff888e9..4b0b156b 100644 --- a/lib/mine/addLock/lock_voice_setting/lock_voice_setting_logic.dart +++ b/lib/mine/addLock/lock_voice_setting/lock_voice_setting_logic.dart @@ -31,6 +31,11 @@ class LockVoiceSettingLogic extends BaseGetXController { LockVoiceSettingState state = LockVoiceSettingState(); StreamSubscription? _replySubscription; bool _isThrottled = false; +// 超时定时器(用于检测是否未收到回复) + Timer? _sendTimeoutTimer; + +// 超时标志位(可选,防止重复处理) + bool _isTimeout = false; @override void onInit() async { @@ -168,6 +173,9 @@ class LockVoiceSettingLogic extends BaseGetXController { void _handlerVoicePackageConfigureProcess( VoicePackageConfigureProcessReply reply) { + // 取消超时定时器(已收到回复,无需继续等待) + _sendTimeoutTimer?.cancel(); + _isTimeout = false; // 重置超时标志 final int status = reply.data[2]; switch (status) { case 0x00: @@ -300,8 +308,27 @@ class LockVoiceSettingLogic extends BaseGetXController { state.progress.value = 0.0; // 开始前重置进度 _sendNextPackage(); } + void _handleSendTimeout() { + _isTimeout = true; // 标记超时状态 + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + showBlueConnetctToast(); + + // 重置状态,避免后续错误操作 + state.voiceSubcontractingIndex = 0; + state.voiceSubcontractingCount = 0; + state.data = null; + state.progress.value = 0.0; + _isTimeout = false; // 标记超时状态 + } void _sendNextPackage() { + // 若已超时,直接返回 + if (_isTimeout) return; + + // 取消上一次未完成的定时器(避免重复触发) + _sendTimeoutTimer?.cancel(); + if (state.voiceSubcontractingIndex >= state.voiceSubcontractingCount) { print('所有分包已发送完成'); state.progress.value = 1.0; // 发送完成 @@ -309,6 +336,12 @@ class LockVoiceSettingLogic extends BaseGetXController { return; } + // 启动 3 秒超时定时器 + _sendTimeoutTimer = Timer(Duration(seconds: 3), () { + _handleSendTimeout(); // 触发超时处理 + }); + + int start = state.voiceSubcontractingIndex * state.voiceSubcontractingSize; int end = start + state.voiceSubcontractingSize; if (end > state.data!.length) end = state.data!.length;