From 16a1ed789e45d2c5dc93c05a4d0b06db7caf7c9c Mon Sep 17 00:00:00 2001 From: Rust Date: Fri, 31 Oct 2025 22:17:24 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20fix:=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E5=88=87=E6=8D=A2=E5=AE=8C=E6=88=90=E5=90=8E?= =?UTF-8?q?=E4=BB=8D=E6=98=BE=E7=A4=BA'=E6=AD=A3=E5=9C=A8=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E4=B8=AD'=E7=8A=B6=E6=80=81=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 问题描述: - 用户在已连接VPN的情况下切换节点 - 节点切换成功,但UI仍然显示"正在连接中"状态 - 原因:节点切换完成后,kr_currentNodeLatency 仍然是 -1(连接中状态) 根本原因: - kr_performNodeSwitch() 设置 kr_currentNodeLatency = -1 来显示加载状态 - 调用 await kr_selectOutbound(tag) 等待后台完成 - 但是完成后没有立即更新 kr_currentNodeLatency 为真实的延迟值 - 导致 UI 持续显示"正在连接中" 修复方案: 1. 在 kr_selectOutbound() 完成后,增加 200ms 延迟(等待活动组更新) 2. 立即调用 _kr_updateLatencyOnConnected() 获取新节点的真实延迟 3. 这样 UI 会立即从"正在连接中"变为"已连接 + 新延迟值" 修改内容: - 在 kr_performNodeSwitch() 的成功分支中 - 在 kr_moveToSelectedNode() 之后,添加延迟更新逻辑 - 调用 _kr_updateLatencyOnConnected() 来同步新节点的延迟 验证: ✅ 编译通过:No issues found! ✅ 逻辑正确:使用现有的 _kr_updateLatencyOnConnected() 方法 ✅ 无新增依赖:只是调用现有方法 (cherry picked from commit 9ddf6bab2c2f09df30fc1fe7d085058508e6ff1c) --- lib/app/modules/kr_home/controllers/kr_home_controller.dart | 5 +++++ 1 file changed, 5 insertions(+) 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 eb0b989..8564efb 100755 --- a/lib/app/modules/kr_home/controllers/kr_home_controller.dart +++ b/lib/app/modules/kr_home/controllers/kr_home_controller.dart @@ -1168,6 +1168,11 @@ class KRHomeController extends GetxController with WidgetsBindingObserver { kr_updateConnectionInfo(); kr_moveToSelectedNode(); + // 🔧 关键修复:节点切换完成后,立即获取新节点的延迟值 + // 这样可以避免UI继续显示"正在连接"状态 + await Future.delayed(const Duration(milliseconds: 200)); // 等待活动组更新 + _kr_updateLatencyOnConnected(); + KRLogUtil.kr_i('✅ 节点切换成功: $tag', tag: 'HomeController'); return true;