修正切换和国旗问题
(cherry picked from commit bec2464da85e981636077276de36b2ea5f6c40f4)
This commit is contained in:
@@ -1195,6 +1195,7 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
|
||||
// 恢复原状态
|
||||
kr_cutTag.value = originalTag;
|
||||
kr_currentNodeName.value = originalTag; // 🔧 修复:同时恢复节点名称显示
|
||||
kr_currentNodeLatency.value = -2; // 恢复为未连接状态
|
||||
|
||||
// 显示错误提示给用户
|
||||
@@ -1222,11 +1223,77 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
}
|
||||
|
||||
/// 获取当前节点国家
|
||||
/// 🔧 修复:使用 kr_cutTag 而不是 kr_cutSeletedTag,确保UI立即响应
|
||||
/// 🔧 修复:处理 "auto" 等特殊标签,从活动组中获取实际选中的节点
|
||||
String kr_getCurrentNodeCountry() {
|
||||
if (kr_cutSeletedTag.isEmpty) return '';
|
||||
final node = kr_subscribeService.keyList[kr_cutSeletedTag.value];
|
||||
KRLogUtil.kr_i(kr_cutSeletedTag.value, tag: "kr_getCurrentNodeCountry");
|
||||
return node?.country ?? '';
|
||||
KRLogUtil.kr_i('========== 开始获取国家代码 ==========', tag: 'getCurrentNodeCountry');
|
||||
KRLogUtil.kr_i('kr_cutTag: ${kr_cutTag.value}', tag: 'getCurrentNodeCountry');
|
||||
KRLogUtil.kr_i('kr_cutSeletedTag: ${kr_cutSeletedTag.value}', tag: 'getCurrentNodeCountry');
|
||||
KRLogUtil.kr_i('keyList 节点总数: ${kr_subscribeService.keyList.length}', tag: 'getCurrentNodeCountry');
|
||||
|
||||
if (kr_cutTag.isEmpty) {
|
||||
KRLogUtil.kr_w('kr_cutTag 为空,返回空字符串', tag: 'getCurrentNodeCountry');
|
||||
return '';
|
||||
}
|
||||
|
||||
String actualTag = kr_cutTag.value;
|
||||
|
||||
// 🔧 修复:如果是 "auto" 或其他选择器组,从活动组中获取实际选中的节点
|
||||
if (actualTag == 'auto' || actualTag == 'select') {
|
||||
try {
|
||||
KRLogUtil.kr_i('检测到特殊标签: $actualTag,尝试从活动组获取实际节点', tag: 'getCurrentNodeCountry');
|
||||
KRLogUtil.kr_i('活动组数量: ${KRSingBoxImp.instance.kr_activeGroups.length}', tag: 'getCurrentNodeCountry');
|
||||
|
||||
// 从 SingBox 活动组中找到 "select" 选择器组
|
||||
final selectGroup = KRSingBoxImp.instance.kr_activeGroups.firstWhere(
|
||||
(group) => group.tag == 'select',
|
||||
orElse: () => throw Exception('未找到 select 组'),
|
||||
);
|
||||
|
||||
KRLogUtil.kr_i('找到 select 组,当前选中: ${selectGroup.selected}', tag: 'getCurrentNodeCountry');
|
||||
|
||||
// 获取该组当前选中的实际节点标签
|
||||
if (selectGroup.selected.isNotEmpty) {
|
||||
actualTag = selectGroup.selected;
|
||||
KRLogUtil.kr_i('从 select 组获取实际节点: $actualTag', tag: 'getCurrentNodeCountry');
|
||||
}
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_w('获取实际节点失败: $e', tag: 'getCurrentNodeCountry');
|
||||
// 失败时使用 kr_cutSeletedTag 作为备选
|
||||
if (kr_cutSeletedTag.value.isNotEmpty && kr_cutSeletedTag.value != 'auto') {
|
||||
actualTag = kr_cutSeletedTag.value;
|
||||
KRLogUtil.kr_i('使用 kr_cutSeletedTag 作为备选: $actualTag', tag: 'getCurrentNodeCountry');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 使用实际节点标签查找国家代码
|
||||
KRLogUtil.kr_i('查找节点: $actualTag', tag: 'getCurrentNodeCountry');
|
||||
final node = kr_subscribeService.keyList[actualTag];
|
||||
|
||||
if (node == null) {
|
||||
KRLogUtil.kr_e('❌ 节点未找到: $actualTag', tag: 'getCurrentNodeCountry');
|
||||
KRLogUtil.kr_e('keyList 中的所有节点标签:', tag: 'getCurrentNodeCountry');
|
||||
int count = 0;
|
||||
for (var key in kr_subscribeService.keyList.keys) {
|
||||
count++;
|
||||
KRLogUtil.kr_e(' [$count] $key -> country: ${kr_subscribeService.keyList[key]?.country}', tag: 'getCurrentNodeCountry');
|
||||
if (count >= 10) {
|
||||
KRLogUtil.kr_e(' ... 还有 ${kr_subscribeService.keyList.length - 10} 个节点', tag: 'getCurrentNodeCountry');
|
||||
break;
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
KRLogUtil.kr_i('✅ 找到节点: $actualTag', tag: 'getCurrentNodeCountry');
|
||||
KRLogUtil.kr_i(' - city: ${node.city}', tag: 'getCurrentNodeCountry');
|
||||
KRLogUtil.kr_i(' - country: "${node.country}"', tag: 'getCurrentNodeCountry');
|
||||
KRLogUtil.kr_i(' - country.isEmpty: ${node.country.isEmpty}', tag: 'getCurrentNodeCountry');
|
||||
KRLogUtil.kr_i(' - country.length: ${node.country.length}', tag: 'getCurrentNodeCountry');
|
||||
KRLogUtil.kr_i('========== 国家代码获取结束 ==========', tag: 'getCurrentNodeCountry');
|
||||
|
||||
return node.country;
|
||||
}
|
||||
|
||||
/// 获取真实连接的节点信息(auto 模式下获取实际连接的节点)
|
||||
|
||||
@@ -79,9 +79,14 @@ class KRHomeConnectionInfoView extends GetView<KRHomeController> {
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
KRCountryFlag(
|
||||
countryCode: controller.kr_getCurrentNodeCountry(),
|
||||
),
|
||||
// 🔧 修复:使用 Obx 包裹确保国旗响应式更新
|
||||
Obx(() {
|
||||
final countryCode = controller.kr_getCurrentNodeCountry();
|
||||
print('🌍 ConnectionInfo 更新,国家代码: $countryCode');
|
||||
return KRCountryFlag(
|
||||
countryCode: countryCode,
|
||||
);
|
||||
}),
|
||||
SizedBox(width: 10.w),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
|
||||
Reference in New Issue
Block a user