feat: 节点测速auto调整
This commit is contained in:
parent
b059d01556
commit
4fdf4da4f3
@ -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 (_) {}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
Loading…
x
Reference in New Issue
Block a user