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() { 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 (_) {}
}
} }

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 '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