Rust
c56f0a0f7f
🔧 fix: 解决节点切换UI/后台不同步问题 - 实现统一的异步节点切换机制
问题描述:
- UI快速显示切换到新节点,但后台代理仍使用原节点
- 根本原因:异步操作未等待完成,导致竞态条件
- UI更新(<5ms) vs 后台操作(100-500ms) 时间差导致不同步
解决方案 - 完全重构(方案1):
1️⃣ 新增统一的节点切换方法 kr_performNodeSwitch()
- 包含完整的异步/等待机制
- 显示加载状态反馈
- 失败时自动恢复
- 返回success/failure标识
2️⃣ 修改所有节点选择点 (4个InkWell位置)
- 从同步改为async/await
- 调用统一的kr_performNodeSwitch()方法
- 仅在成功后关闭列表窗口
3️⃣ 简化kr_selectNode()方法
- 从70行减少到3行
- 现在只是委托给kr_performNodeSwitch()
- 保持向后兼容性
修改文件:
- lib/app/modules/kr_home/controllers/kr_home_controller.dart
* 新增kr_performNodeSwitch()方法(+93行)
* 简化kr_selectNode()方法(-67行)
* 新增KRCommonUtil导入
- lib/app/modules/kr_home/views/kr_home_node_list_view.dart
* 修改4个InkWell的onTap处理
* 添加async/await和错误处理
* 全部更新为统一的节点切换调用
编译验证: ✅ 通过
- kr_home_controller.dart: 无错误
- kr_home_node_list_view.dart: 无新增错误
测试验证:
- ✅ UI显示加载状态
- ✅ 等待后台完成后关闭列表
- ✅ 失败时显示错误提示并恢复
- ✅ 实际代理确实切换到新节点
- ✅ 无重复调用问题
(cherry picked from commit c0c86dcb43d69e452d729a82a07db4cd34597082)
2025-10-31 19:37:21 -07:00
..
2025-10-31 19:37:21 -07:00
2025-10-13 18:08:02 +08:00
2025-10-13 18:08:02 +08:00
2025-10-13 18:08:02 +08:00
2025-10-31 00:13:52 -07:00
2025-10-30 04:47:53 -07:00
2025-10-30 23:31:05 -07:00