修复路由冲突和补充多语言

This commit is contained in:
2025-10-17 22:00:46 +08:00
parent 885cd752ed
commit 75836c9c6b
11 changed files with 343 additions and 39 deletions
@@ -10,6 +10,7 @@ import 'package:kaer_with_panels/app/services/kr_site_config_service.dart';
import 'package:kaer_with_panels/app/services/kr_device_info_service.dart';
import 'package:kaer_with_panels/app/services/kr_subscribe_service.dart';
import 'package:kaer_with_panels/app/model/enum/kr_request_type.dart';
import 'package:kaer_with_panels/app/localization/app_translations.dart';
import 'dart:io';
import 'dart:math';
@@ -52,7 +53,7 @@ class KRDeviceManagementController extends GetxController {
result.fold(
(error) {
KRLogUtil.kr_e('加载设备列表失败: ${error.msg}', tag: 'DeviceManagement');
Get.snackbar('错误', error.msg);
Get.snackbar(AppTranslations.kr_dialog.error, error.msg);
},
(deviceList) {
KRLogUtil.kr_i('获取到 ${deviceList.length} 个设备', tag: 'DeviceManagement');
@@ -78,7 +79,7 @@ class KRDeviceManagementController extends GetxController {
} catch (e, stackTrace) {
KRLogUtil.kr_e('加载设备列表异常: $e', tag: 'DeviceManagement');
KRLogUtil.kr_e('堆栈跟踪: $stackTrace', tag: 'DeviceManagement');
Get.snackbar('错误', '加载设备列表失败');
Get.snackbar(AppTranslations.kr_dialog.error, AppTranslations.kr_deviceManagement.loadDeviceListFailed);
} finally {
isLoading.value = false;
}
@@ -102,10 +103,10 @@ class KRDeviceManagementController extends GetxController {
// 显示确认对话框
await KRDialog.show(
title: '确认删除',
title: AppTranslations.kr_deviceManagement.deleteConfirmTitle,
message: isCurrent
? '确定要删除本机设备吗?删除后将使用设备登录自动重新登录。'
: '确定要删除此设备吗?删除后该设备将被强制下线。',
? AppTranslations.kr_deviceManagement.deleteCurrentDeviceMessage
: AppTranslations.kr_deviceManagement.deleteOtherDeviceMessage,
icon: Container(
width: 56,
height: 56,
@@ -119,8 +120,8 @@ class KRDeviceManagementController extends GetxController {
size: 32,
),
),
confirmText: '删除',
cancelText: '取消',
confirmText: AppTranslations.kr_dialog.delete,
cancelText: AppTranslations.kr_dialog.kr_cancel,
onConfirm: () {
confirmed = true;
},
@@ -139,7 +140,7 @@ class KRDeviceManagementController extends GetxController {
result.fold(
(error) {
KRLogUtil.kr_e('删除设备失败: ${error.msg}', tag: 'DeviceManagement');
Get.snackbar('错误', '删除失败:${error.msg}');
Get.snackbar(AppTranslations.kr_dialog.error, AppTranslations.kr_deviceManagement.deleteFailed(error.msg));
},
(_) async {
KRLogUtil.kr_i('设备删除成功', tag: 'DeviceManagement');
@@ -156,14 +157,14 @@ class KRDeviceManagementController extends GetxController {
} else {
// 删除其他设备,从列表中移除
devices.removeWhere((device) => device['id'] == id);
Get.snackbar('成功', '设备已删除');
Get.snackbar(AppTranslations.kr_dialog.success, AppTranslations.kr_deviceManagement.deleteSuccess);
}
},
);
} catch (e, stackTrace) {
KRLogUtil.kr_e('删除设备异常: $e', tag: 'DeviceManagement');
KRLogUtil.kr_e('堆栈跟踪: $stackTrace', tag: 'DeviceManagement');
Get.snackbar('错误', '删除失败:$e');
Get.snackbar(AppTranslations.kr_dialog.error, AppTranslations.kr_deviceManagement.deleteFailed(e.toString()));
}
}
@@ -187,7 +188,7 @@ class KRDeviceManagementController extends GetxController {
if (!isDeviceLoginEnabled) {
KRLogUtil.kr_w('设备登录未启用,执行完整退出登录', tag: 'DeviceManagement');
Get.snackbar('提示', '设备登录未启用,请手动登录');
Get.snackbar(AppTranslations.kr_dialog.tip, AppTranslations.kr_deviceManagement.deviceLoginDisabled);
await appRunData.kr_loginOut();
return;
}
@@ -205,7 +206,7 @@ class KRDeviceManagementController extends GetxController {
(error) {
// 设备登录失败
KRLogUtil.kr_e('设备登录失败: ${error.msg}', tag: 'DeviceManagement');
Get.snackbar('错误', '自动登录失败:${error.msg},请手动登录');
Get.snackbar(AppTranslations.kr_dialog.error, AppTranslations.kr_deviceManagement.reloginFailed(error.msg));
// 执行完整退出登录,显示登录界面
appRunData.kr_loginOut();
@@ -238,13 +239,13 @@ class KRDeviceManagementController extends GetxController {
KRLogUtil.kr_e('订阅信息刷新失败: $e', tag: 'DeviceManagement');
}
Get.snackbar('成功', '已自动重新登录');
Get.snackbar(AppTranslations.kr_dialog.success, AppTranslations.kr_deviceManagement.reloginSuccess);
},
);
} catch (e, stackTrace) {
KRLogUtil.kr_e('设备重新登录异常: $e', tag: 'DeviceManagement');
KRLogUtil.kr_e('堆栈跟踪: $stackTrace', tag: 'DeviceManagement');
Get.snackbar('错误', '自动登录失败,请手动登录');
Get.snackbar(AppTranslations.kr_dialog.error, AppTranslations.kr_deviceManagement.reloginFailedGeneric);
// 发生异常,执行完整退出登录
await KRAppRunData.getInstance().kr_loginOut();
@@ -253,26 +254,26 @@ class KRDeviceManagementController extends GetxController {
/// 获取设备类型和图标
Map<String, dynamic> getDeviceTypeInfo(String userAgent) {
String deviceType = '未知设备';
String deviceType = AppTranslations.kr_deviceManagement.deviceTypeUnknown;
String iconName = 'devices';
if (userAgent.contains('Android') || userAgent.toLowerCase().contains('android')) {
deviceType = '安卓设备';
deviceType = AppTranslations.kr_deviceManagement.deviceTypeAndroid;
iconName = 'phone_android';
} else if (userAgent.contains('iOS') || userAgent.contains('iPhone') || userAgent.toLowerCase().contains('ios')) {
deviceType = 'iOS 设备';
deviceType = AppTranslations.kr_deviceManagement.deviceTypeIos;
iconName = 'phone_iphone';
} else if (userAgent.contains('iPad')) {
deviceType = 'iPad';
deviceType = AppTranslations.kr_deviceManagement.deviceTypeIpad;
iconName = 'tablet';
} else if (userAgent.contains('macOS') || userAgent.contains('Mac') || userAgent.toLowerCase().contains('mac')) {
deviceType = 'macOS';
deviceType = AppTranslations.kr_deviceManagement.deviceTypeMacos;
iconName = 'desktop_mac';
} else if (userAgent.contains('Windows') || userAgent.toLowerCase().contains('windows')) {
deviceType = 'Windows';
deviceType = AppTranslations.kr_deviceManagement.deviceTypeWindows;
iconName = 'computer';
} else if (userAgent.contains('Linux') || userAgent.toLowerCase().contains('linux')) {
deviceType = 'Linux';
deviceType = AppTranslations.kr_deviceManagement.deviceTypeLinux;
iconName = 'computer';
}
@@ -119,7 +119,7 @@ class KRUserInfoView extends GetView<KRUserInfoController> {
shouldShowLoginPrompt = false;
} else if (isDeviceLogin) {
// 设备登录(游客模式)
displayText = "登录/注册";
displayText = AppTranslations.kr_userInfo.loginRegister;
displayColor = const Color(0xFF1797FF); // 使用蓝色提示可以点击
displayIcon = Icons.touch_app;
shouldShowLoginPrompt = true;
@@ -195,7 +195,7 @@ class KRUserInfoView extends GetView<KRUserInfoController> {
SizedBox(width: 8.w),
Text(
appRunData.isDeviceLogin()
? "游客ID${(appRunData.kr_userId.value ?? 0) + 10000}"
? AppTranslations.kr_userInfo.guestId((appRunData.kr_userId.value ?? 0) + 10000)
: "${AppTranslations.kr_userInfo.balance} ${controller.kr_balance.value.toString()}",
style: KrAppTextStyle(
fontSize: 12,
@@ -667,7 +667,7 @@ class KRUserInfoView extends GetView<KRUserInfoController> {
if (showDeviceManagement)
_kr_buildShortcutContainer(
icon: "my_dns",
title: "设备管理",
title: AppTranslations.kr_userInfo.deviceManagement,
onTap: () {
Get.toNamed(Routes.KR_DEVICE_MANAGEMENT);
},