feat: 节点测速auto调整

This commit is contained in:
speakeloudest 2025-11-26 22:57:52 -08:00
parent b059d01556
commit 4fdf4da4f3
3 changed files with 508 additions and 256 deletions

View File

@ -98,6 +98,7 @@ class HINodeListController extends GetxController with WidgetsBindingObserver {
void onInit() {
super.onInit();
WidgetsBinding.instance.addObserver(this);
_loadSelectedCountry();
}
@override
@ -124,4 +125,14 @@ class HINodeListController extends GetxController with WidgetsBindingObserver {
WidgetsBinding.instance.removeObserver(this);
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 (_) {}
}
}

View File

@ -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 '../../../model/business/kr_outbound_item.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 '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';
@ -83,21 +84,24 @@ class HINodeListView extends GetView<HINodeListController> {
// 2. 使 children
children: [
if (controller.kr_subscribeService.countryOutboundList.isEmpty)
_buildEmptyListPlaceholder(context, AppTranslations.kr_home.noRegions)
_buildEmptyListPlaceholder(
context, AppTranslations.kr_home.noRegions)
else ...[
InkWell(
// 🔧 async
onTap: () async {
try {
final success =
await controller.homeController.kr_performNodeSwitch('auto');
await KRSecureStorage().kr_saveData(
key: 'SELECTED_COUNTRY_TAG', value: 'auto');
controller.homeController.kr_coutryText.value = 'auto';
final success = await controller.homeController
.kr_performNodeSwitch('auto');
if (success) {
controller.homeController.kr_currentListStatus.value =
KRHomeViewsListStatus.kr_none;
}
} catch (e) {
KRLogUtil.kr_e('Auto选项切换异常: $e',
tag: 'NodeListView');
KRLogUtil.kr_e('Auto选项切换异常: $e', tag: 'NodeListView');
}
},
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(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
@ -154,7 +159,7 @@ class HINodeListView extends GetView<HINodeListController> {
),
),
Obx(() =>
controller.homeController.kr_cutSeletedTag.value ==
controller.homeController.kr_coutryText.value ==
'auto'
? KrLocalImage(
imageName: 'radio-active-icon',
@ -177,6 +182,11 @@ class HINodeListView extends GetView<HINodeListController> {
return InkWell(
onTap: () async {
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 success = await controller.homeController
.kr_performNodeSwitch(fastest.tag);
@ -544,9 +554,9 @@ class HINodeListView extends GetView<HINodeListController> {
}),
SizedBox(width: 12.w),
Obx(() {
final selectedTag =
controller.homeController.kr_cutSeletedTag.value;
if (selectedTag == 'auto') {
final selectedCountryField =
controller.homeController.kr_coutryText.value;
if (selectedCountryField == 'auto') {
return KrLocalImage(
imageName: 'radio-icon',
imageType: ImageType.svg,
@ -554,9 +564,7 @@ class HINodeListView extends GetView<HINodeListController> {
height: 16.h,
);
}
final node = controller.kr_subscribeService.keyList[selectedTag];
final selectedCountry = node?.country ?? '';
final selected = selectedCountry == country.country;
final selected = selectedCountryField == country.country;
return selected
? KrLocalImage(
imageName: 'radio-active-icon',

File diff suppressed because it is too large Load Diff