修改flutter兼容版本,优化macos无法切换节点和协议不兼容等问题
(cherry picked from commit dcc07886f8ba73eb2630a14a81bda191468c7a1f)
This commit is contained in:
@@ -665,6 +665,8 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
|
||||
try {
|
||||
kr_isSwitching = true;
|
||||
KRLogUtil.kr_i('🔄 开始切换连接状态: $value', tag: 'HomeController');
|
||||
|
||||
if (value) {
|
||||
await KRSingBoxImp.instance.kr_start();
|
||||
|
||||
@@ -678,16 +680,28 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
kr_forceSyncConnectionStatus();
|
||||
});
|
||||
} else {
|
||||
await KRSingBoxImp.instance.kr_stop();
|
||||
KRLogUtil.kr_i('🛑 准备停止连接...', tag: 'HomeController');
|
||||
// 添加超时保护
|
||||
await KRSingBoxImp.instance.kr_stop().timeout(
|
||||
const Duration(seconds: 10),
|
||||
onTimeout: () {
|
||||
KRLogUtil.kr_e('⚠️ 停止操作超时', tag: 'HomeController');
|
||||
// 强制同步状态
|
||||
kr_forceSyncConnectionStatus();
|
||||
throw TimeoutException('Stop operation timeout');
|
||||
},
|
||||
);
|
||||
KRLogUtil.kr_i('✅ 停止命令已发送', tag: 'HomeController');
|
||||
}
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('切换失败: $e', tag: 'HomeController');
|
||||
// 当启动失败时(如VPN权限被拒绝),强制同步状态
|
||||
// 当启动或停止失败时,强制同步状态
|
||||
Future.delayed(const Duration(milliseconds: 100), () {
|
||||
kr_forceSyncConnectionStatus();
|
||||
});
|
||||
} finally {
|
||||
// 确保在任何情况下都会重置标志
|
||||
KRLogUtil.kr_i('🔓 重置切换标志', tag: 'HomeController');
|
||||
kr_isSwitching = false;
|
||||
}
|
||||
}
|
||||
@@ -1088,10 +1102,11 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
// 更新连接信息
|
||||
kr_updateConnectionInfo();
|
||||
|
||||
// 🔧 修复:只有在核心已启动时才选择节点,避免触发重启
|
||||
if (KRSingBoxImp.instance.kr_status.value == SingboxStarted()) {
|
||||
KRSingBoxImp.instance.kr_selectOutbound(tag);
|
||||
|
||||
// 🔧 修复:选择节点后启动延迟值更新(带超时保护)
|
||||
// 🔧 修复:选择节点后启动延迟值更新(带超时保护)
|
||||
Future.delayed(const Duration(milliseconds: 500), () {
|
||||
if (kr_currentNodeLatency.value == -1 && kr_isConnected.value) {
|
||||
KRLogUtil.kr_w('⚠️ 选择节点后延迟值未更新,尝试手动更新', tag: 'HomeController');
|
||||
@@ -1101,7 +1116,13 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
}
|
||||
});
|
||||
} else {
|
||||
KRSingBoxImp().kr_start();
|
||||
// 🔧 修复:核心未启动时,仍需保存用户选择,以便启动VPN时应用
|
||||
KRLogUtil.kr_i('💾 核心未启动,保存节点选择以便稍后应用: $tag', tag: 'HomeController');
|
||||
KRSecureStorage().kr_saveData(key: 'SELECTED_NODE_TAG', value: tag).then((_) {
|
||||
KRLogUtil.kr_i('✅ 节点选择已保存: $tag', tag: 'HomeController');
|
||||
}).catchError((e) {
|
||||
KRLogUtil.kr_e('❌ 保存节点选择失败: $e', tag: 'HomeController');
|
||||
});
|
||||
}
|
||||
|
||||
// 移动到选中的节点
|
||||
|
||||
Reference in New Issue
Block a user