From b3ee1cc6dcdc7c04b009070ebeb0edabe23adc7c Mon Sep 17 00:00:00 2001 From: Rust Date: Sat, 1 Nov 2025 04:59:08 -0700 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=88=87=E6=8D=A2=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E9=95=BF=E8=BF=9E=E6=8E=A5=E8=BF=98=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C=E7=9B=AE=E5=89=8D=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=88=87=E6=8D=A2=E4=B9=8B=E5=90=8E=E5=85=88=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E6=9C=8D=E5=8A=A1=E5=9C=A8=E5=90=AF=E5=8A=A8=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 3c0c6dde0969fa9847fa77db78abbb6a098e50ef) --- .../controllers/kr_home_controller.dart | 48 ++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/lib/app/modules/kr_home/controllers/kr_home_controller.dart b/lib/app/modules/kr_home/controllers/kr_home_controller.dart index 6813af2..d3e3795 100755 --- a/lib/app/modules/kr_home/controllers/kr_home_controller.dart +++ b/lib/app/modules/kr_home/controllers/kr_home_controller.dart @@ -1011,28 +1011,54 @@ class KRHomeController extends GetxController with WidgetsBindingObserver { KRLogUtil.kr_i('💾 保存新节点选择: $tag', tag: 'HomeController'); await KRSecureStorage().kr_saveData(key: 'SELECTED_NODE_TAG', value: tag); - // 🔧 关键修复:重启VPN连接以断开所有现有长连接 - KRLogUtil.kr_i('🔄 停止VPN连接以断开现有连接...', tag: 'HomeController'); + // 🔧 方案A增强:重启VPN连接以断开所有现有长连接 + KRLogUtil.kr_i('🔄 [增强] 停止VPN连接以断开现有连接...', tag: 'HomeController'); await KRSingBoxImp.instance.kr_stop(); // 先停止VPN - KRLogUtil.kr_i('⏳ 等待VPN完全停止...', tag: 'HomeController'); - await Future.delayed(const Duration(milliseconds: 800)); // 等待停止完成 + // 🚀 方案A增强:增加等待时间,确保所有连接完全释放 + KRLogUtil.kr_i('⏳ [增强] 等待VPN完全停止(1500ms,确保旧连接全部断开)...', tag: 'HomeController'); + await Future.delayed(const Duration(milliseconds: 1500)); // 从800ms增加到1500ms - KRLogUtil.kr_i('🔄 启动VPN并应用新节点: $tag', tag: 'HomeController'); + KRLogUtil.kr_i('🔄 [增强] 启动VPN并应用新节点: $tag', tag: 'HomeController'); await KRSingBoxImp.instance.kr_start(); // 重新启动VPN,会自动使用新保存的节点 - // 等待VPN启动完成 - KRLogUtil.kr_i('⏳ 等待VPN启动完成...', tag: 'HomeController'); - await Future.delayed(const Duration(milliseconds: 1500)); // 等待启动完成 + // 🚀 方案A增强:增加启动等待时间,确保新VPN完全建立 + KRLogUtil.kr_i('⏳ [增强] 等待VPN完全启动(2500ms,确保新连接完全建立)...', tag: 'HomeController'); + await Future.delayed(const Duration(milliseconds: 2500)); // 从1500ms增加到2500ms // 后台切换成功,更新UI kr_cutSeletedTag.value = tag; kr_updateConnectionInfo(); kr_moveToSelectedNode(); - // 🔧 关键修复:节点切换完成后,立即获取新节点的延迟值 - // 这样可以避免UI继续显示"正在连接"状态 - await Future.delayed(const Duration(milliseconds: 200)); // 等待活动组更新 + // 🚀 方案A增强:增加验证前等待时间,确保活动组完全更新 + KRLogUtil.kr_i('⏳ [增强] 等待活动组更新(500ms)...', tag: 'HomeController'); + await Future.delayed(const Duration(milliseconds: 500)); // 从200ms增加到500ms + + // 🚀 方案A增强:验证节点是否真正切换成功 + KRLogUtil.kr_i('🔍 [增强] 验证节点切换是否成功...', tag: 'HomeController'); + try { + // 刷新活动组信息 + final activeGroups = KRSingBoxImp.instance.kr_activeGroups; + final selectGroup = activeGroups.firstWhere( + (group) => group.tag == 'select', + orElse: () => throw Exception('未找到 select 组'), + ); + + KRLogUtil.kr_i('📊 [增强] Select组当前选中: ${selectGroup.selected}', tag: 'HomeController'); + KRLogUtil.kr_i('📊 [增强] 目标节点: $tag', tag: 'HomeController'); + + if (selectGroup.selected != tag) { + KRLogUtil.kr_w('⚠️ [增强] 节点选择验证失败,实际选中: ${selectGroup.selected}', tag: 'HomeController'); + // 不抛出异常,但记录警告 + } else { + KRLogUtil.kr_i('✅ [增强] 节点选择验证成功!', tag: 'HomeController'); + } + } catch (e) { + KRLogUtil.kr_w('⚠️ [增强] 节点验证过程出错: $e', tag: 'HomeController'); + } + + // 更新延迟信息 _kr_updateLatencyOnConnected(); KRLogUtil.kr_i('✅ 节点切换成功(已重启VPN断开旧连接): $tag', tag: 'HomeController');