feat: 节点测速auto调整
This commit is contained in:
parent
b059d01556
commit
4fdf4da4f3
@ -98,6 +98,7 @@ class HINodeListController extends GetxController with WidgetsBindingObserver {
|
|||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
WidgetsBinding.instance.addObserver(this);
|
WidgetsBinding.instance.addObserver(this);
|
||||||
|
_loadSelectedCountry();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -124,4 +125,14 @@ class HINodeListController extends GetxController with WidgetsBindingObserver {
|
|||||||
WidgetsBinding.instance.removeObserver(this);
|
WidgetsBinding.instance.removeObserver(this);
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _loadSelectedCountry() async {
|
||||||
|
try {
|
||||||
|
final v =
|
||||||
|
await KRSecureStorage().kr_readData(key: 'SELECTED_COUNTRY_TAG');
|
||||||
|
if (v != null && v.isNotEmpty) {
|
||||||
|
homeController.kr_coutryText.value = v;
|
||||||
|
}
|
||||||
|
} catch (_) {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import 'package:kaer_with_panels/app/widgets/kr_app_text_style.dart';
|
|||||||
import 'package:kaer_with_panels/app/widgets/kr_country_flag.dart';
|
import 'package:kaer_with_panels/app/widgets/kr_country_flag.dart';
|
||||||
import '../../../model/business/kr_outbound_item.dart';
|
import '../../../model/business/kr_outbound_item.dart';
|
||||||
import '../../../utils/kr_log_util.dart';
|
import '../../../utils/kr_log_util.dart';
|
||||||
|
import 'package:kaer_with_panels/app/utils/kr_secure_storage.dart';
|
||||||
import '../controllers/hi_node_list_controller.dart';
|
import '../controllers/hi_node_list_controller.dart';
|
||||||
import 'package:kaer_with_panels/app/modules/kr_home/models/kr_home_views_status.dart';
|
import 'package:kaer_with_panels/app/modules/kr_home/models/kr_home_views_status.dart';
|
||||||
import 'package:kaer_with_panels/app/services/singbox_imp/kr_sing_box_imp.dart';
|
import 'package:kaer_with_panels/app/services/singbox_imp/kr_sing_box_imp.dart';
|
||||||
@ -83,21 +84,24 @@ class HINodeListView extends GetView<HINodeListController> {
|
|||||||
// 2. 使用 children 属性,并一次性构建所有列表项
|
// 2. 使用 children 属性,并一次性构建所有列表项
|
||||||
children: [
|
children: [
|
||||||
if (controller.kr_subscribeService.countryOutboundList.isEmpty)
|
if (controller.kr_subscribeService.countryOutboundList.isEmpty)
|
||||||
_buildEmptyListPlaceholder(context, AppTranslations.kr_home.noRegions)
|
_buildEmptyListPlaceholder(
|
||||||
|
context, AppTranslations.kr_home.noRegions)
|
||||||
else ...[
|
else ...[
|
||||||
InkWell(
|
InkWell(
|
||||||
// 🔧 修复:改为 async,等待节点切换完成后再关闭列表
|
// 🔧 修复:改为 async,等待节点切换完成后再关闭列表
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
try {
|
try {
|
||||||
final success =
|
await KRSecureStorage().kr_saveData(
|
||||||
await controller.homeController.kr_performNodeSwitch('auto');
|
key: 'SELECTED_COUNTRY_TAG', value: 'auto');
|
||||||
|
controller.homeController.kr_coutryText.value = 'auto';
|
||||||
|
final success = await controller.homeController
|
||||||
|
.kr_performNodeSwitch('auto');
|
||||||
if (success) {
|
if (success) {
|
||||||
controller.homeController.kr_currentListStatus.value =
|
controller.homeController.kr_currentListStatus.value =
|
||||||
KRHomeViewsListStatus.kr_none;
|
KRHomeViewsListStatus.kr_none;
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
KRLogUtil.kr_e('Auto选项切换异常: $e',
|
KRLogUtil.kr_e('Auto选项切换异常: $e', tag: 'NodeListView');
|
||||||
tag: 'NodeListView');
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
@ -109,7 +113,8 @@ class HINodeListView extends GetView<HINodeListController> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
padding: EdgeInsets.symmetric(vertical: 12.w, horizontal: 16.w),
|
padding:
|
||||||
|
EdgeInsets.symmetric(vertical: 12.w, horizontal: 16.w),
|
||||||
child: Row(
|
child: Row(
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
@ -154,7 +159,7 @@ class HINodeListView extends GetView<HINodeListController> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Obx(() =>
|
Obx(() =>
|
||||||
controller.homeController.kr_cutSeletedTag.value ==
|
controller.homeController.kr_coutryText.value ==
|
||||||
'auto'
|
'auto'
|
||||||
? KrLocalImage(
|
? KrLocalImage(
|
||||||
imageName: 'radio-active-icon',
|
imageName: 'radio-active-icon',
|
||||||
@ -177,6 +182,11 @@ class HINodeListView extends GetView<HINodeListController> {
|
|||||||
return InkWell(
|
return InkWell(
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
try {
|
try {
|
||||||
|
await KRSecureStorage().kr_saveData(
|
||||||
|
key: 'SELECTED_COUNTRY_TAG',
|
||||||
|
value: country.country);
|
||||||
|
controller.homeController.kr_coutryText.value =
|
||||||
|
country.country;
|
||||||
final fastest = findFastestNode(country.outboundList);
|
final fastest = findFastestNode(country.outboundList);
|
||||||
final success = await controller.homeController
|
final success = await controller.homeController
|
||||||
.kr_performNodeSwitch(fastest.tag);
|
.kr_performNodeSwitch(fastest.tag);
|
||||||
@ -544,9 +554,9 @@ class HINodeListView extends GetView<HINodeListController> {
|
|||||||
}),
|
}),
|
||||||
SizedBox(width: 12.w),
|
SizedBox(width: 12.w),
|
||||||
Obx(() {
|
Obx(() {
|
||||||
final selectedTag =
|
final selectedCountryField =
|
||||||
controller.homeController.kr_cutSeletedTag.value;
|
controller.homeController.kr_coutryText.value;
|
||||||
if (selectedTag == 'auto') {
|
if (selectedCountryField == 'auto') {
|
||||||
return KrLocalImage(
|
return KrLocalImage(
|
||||||
imageName: 'radio-icon',
|
imageName: 'radio-icon',
|
||||||
imageType: ImageType.svg,
|
imageType: ImageType.svg,
|
||||||
@ -554,9 +564,7 @@ class HINodeListView extends GetView<HINodeListController> {
|
|||||||
height: 16.h,
|
height: 16.h,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
final node = controller.kr_subscribeService.keyList[selectedTag];
|
final selected = selectedCountryField == country.country;
|
||||||
final selectedCountry = node?.country ?? '';
|
|
||||||
final selected = selectedCountry == country.country;
|
|
||||||
return selected
|
return selected
|
||||||
? KrLocalImage(
|
? KrLocalImage(
|
||||||
imageName: 'radio-active-icon',
|
imageName: 'radio-active-icon',
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user