feat: 修复节点切换bug

This commit is contained in:
2025-12-04 07:37:39 -08:00
parent d63b3bfc3c
commit 17860e333c
2 changed files with 23 additions and 12 deletions
@@ -1504,6 +1504,7 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
},
(_) {
// 切换成功
KRSingBoxImp.instance.kr_startNodeSelectionMonitor(tag);
KRLogUtil.kr_i('✅ selectOutbound 调用成功', tag: 'HomeController');
},
);
@@ -1635,9 +1635,7 @@ class KRSingBoxImp {
KRLogUtil.kr_i('🛑 停止 SingBox 服务...', tag: 'SingBox');
// 取消节点选择监控定时器
_nodeSelectionTimer?.cancel();
_nodeSelectionTimer = null;
KRLogUtil.kr_i('✅ 节点选择监控已停止', tag: 'SingBox');
kr_resetNodeSelectionMonitor();
await Future.delayed(const Duration(milliseconds: 100));
@@ -1977,7 +1975,22 @@ class KRSingBoxImp {
// 🔄 如果用户选择了具体节点(不是 auto),启动定期检查和重新选择
// 这是为了防止 urltest 自动覆盖用户的手动选择
_nodeSelectionTimer?.cancel();
kr_startNodeSelectionMonitor(tag);
}
/// 配合文件地址
Directory get directory =>
Directory(p.join(kr_configDics.workingDir.path, "configs"));
File _file(String fileName) {
return File(p.join(directory.path, "$fileName.json"));
}
File _tempFile(String fileName) => _file("$fileName.tmp");
/// 启动节点选择监控定时器,防止用户手动选择被自动策略覆盖
void kr_startNodeSelectionMonitor(String tag) {
kr_resetNodeSelectionMonitor();
if (tag != 'auto') {
KRLogUtil.kr_i('🔁 启动节点选择监控,防止被 auto 覆盖', tag: 'SingBox');
_nodeSelectionTimer =
@@ -1997,16 +2010,13 @@ class KRSingBoxImp {
}
}
/// 配合文件地址
Directory get directory =>
Directory(p.join(kr_configDics.workingDir.path, "configs"));
File _file(String fileName) {
return File(p.join(directory.path, "$fileName.json"));
/// 重置并停止节点选择监控定时器
void kr_resetNodeSelectionMonitor() {
_nodeSelectionTimer?.cancel();
_nodeSelectionTimer = null;
KRLogUtil.kr_i('✅ 节点选择监控已停止', tag: 'SingBox');
}
File _tempFile(String fileName) => _file("$fileName.tmp");
// File tempFile(String fileName) => file("$fileName.tmp");
Future<void> kr_urlTest(String groupTag) async {