From e2c4575cb80db163d81c19a347b0b36d79ac5d29 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Mon, 5 Jan 2026 10:49:38 +0800 Subject: [PATCH] =?UTF-8?q?refactor(settings):=20=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E8=AF=AD=E8=A8=80=E5=8F=98=E9=87=8F=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=AF=AD=E8=A8=80=E8=AE=BE=E7=BD=AE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将`language`重命名为`currentLanguage`以提高可读性 优化语言设置逻辑,添加详细注释说明 整理语言列表的代码格式 --- .../controllers/settings_controller.dart | 51 +++++++++++-------- .../models/settings_language_data.dart | 28 ++++------ lib/modules/settings/views/settings_view.dart | 6 ++- 3 files changed, 44 insertions(+), 41 deletions(-) diff --git a/lib/modules/settings/controllers/settings_controller.dart b/lib/modules/settings/controllers/settings_controller.dart index 245ac4e48..54b40fb96 100644 --- a/lib/modules/settings/controllers/settings_controller.dart +++ b/lib/modules/settings/controllers/settings_controller.dart @@ -21,7 +21,7 @@ class SettingsController extends GetxController { // 语言设置 final List languageList = settingsLanguageList; - Rx language = LanguageModel().obs; + Rx currentLanguage = LanguageModel().obs; // 当前选择的语言 final GetStorage _storage = GetStorage(); @@ -56,9 +56,6 @@ class SettingsController extends GetxController { // 设置当前主题状态 isDarkMode.value = savedDarkMode; - //获取用户信息 - // loadUserInfo(); - // 获取应用版本信息 getAppVersion(); } @@ -75,31 +72,42 @@ class SettingsController extends GetxController { } } + /// 获取系统语言 + /// 从存储中读取用户上次选择的语言 + /// 如果没有保存记录,则默认使用第一个语言 void _getLanguage() { - String? languageValue = _storage.read('language'); - LanguageModel data = languageList.firstWhere( - (element) => element.value == languageValue, + String? storedLanguageCode = _storage.read('language'); + //在语言列表中查找匹配的语言 + LanguageModel languageToApply = languageList.firstWhere( + //查找条件:元素的value属性与从存储中读取的值匹配 + (element) => element.value == storedLanguageCode, + //如果没有找到匹配的语言,返回第一个语言作为默认值 orElse: () => languageList[0], ); - language.value = data; + currentLanguage.value = languageToApply; } - /// 设置语言 - Future setLanguage(LanguageModel data) async { + /// 设置应用语言 + /// 1. 更新Flutter的Locale设置 + /// 2. 保存用户选择到本地存储 + /// 3. 更新agent服务的语音识别语言设置 + /// 4. 显示语言切换成功提示 + /// 5. 延迟一下确保语言更新完成,然后重新进入应用 + Future setLanguage(LanguageModel selectedLanguage) async { try { // 如果用户选择的语言与当前语言一致,则直接返回,避免重复设置 - // print('lxm--设置语言: ${data.value}'); - // print('lxm--当前语言: ${language.value.value}'); - if (data.value == language.value.value) { + // print('lxm--设置语言: ${selectedLanguage.value}'); + // print('lxm--当前语言: ${currentLanguage.value.value}'); + if (selectedLanguage.value == currentLanguage.value.value) { return; } Locale? targetLocale; - // print('lxm--设置语言: ${data.value}'); + // print('lxm--设置语言: ${selectedLanguage.value}'); - if (data.value != 'system') { + if (selectedLanguage.value != 'system') { // 用户手动选择的语言 - List languageList = data.value.split('_'); + List languageList = selectedLanguage.value.split('_'); targetLocale = Locale(languageList[0], languageList[1]); } else { // 跟随系统语言,使用智能匹配 @@ -112,7 +120,8 @@ class SettingsController extends GetxController { if (targetLocale != null) { Get.updateLocale(targetLocale); - Logger().i("设置语言: ${data.value} -> ${targetLocale.toString()}"); + Logger() + .i("设置语言: ${selectedLanguage.value} -> ${targetLocale.toString()}"); } else { // 如果无法确定目标语言,使用智能fallback targetLocale = AppTranslations.getSmartFallbackLocale(); @@ -121,14 +130,14 @@ class SettingsController extends GetxController { } // 保存用户选择 - language.value = data; - await _storage.write('language', data.value); + currentLanguage.value = selectedLanguage; + await _storage.write('language', selectedLanguage.value); // 更新agent服务的语音识别语言设置 - await _updateAgentLanguageSettings(data); + await _updateAgentLanguageSettings(selectedLanguage); // 显示语言切换成功提示 - Logger().i("语言切换成功: ${data.value}"); + Logger().i("语言切换成功: ${selectedLanguage.value}"); // 延迟一下确保语言更新完成,然后重新进入应用 await Future.delayed(const Duration(milliseconds: 500)); diff --git a/lib/modules/settings/models/settings_language_data.dart b/lib/modules/settings/models/settings_language_data.dart index 86afc5aa1..91e16250e 100644 --- a/lib/modules/settings/models/settings_language_data.dart +++ b/lib/modules/settings/models/settings_language_data.dart @@ -1,5 +1,7 @@ import 'language_model.dart'; +/// App界面支持的语言列表 +/// 包含跟随系统、英语、中文、繁体中文、香港繁体中文、西班牙语、葡萄牙语、日语、韩语、法语、德语、俄语、阿拉伯语、波斯语、越南语、意大利语、印地语、印尼语、泰语、马来语等语言选项 final List settingsLanguageList = List.unmodifiable([ LanguageModel(name: 'followingSystem', alias: '', value: 'system'), // 跟随系统.tr LanguageModel(name: 'english', alias: 'English', value: 'en_US'), // 英语.tr @@ -10,8 +12,7 @@ final List settingsLanguageList = List.unmodifiable([ name: 'traditionalChineseHK', alias: '繁體中文(HK)', value: 'zh_HK'), // 添加香港繁体中文 - LanguageModel( - name: 'spanish', alias: 'Español', value: 'es_ES'), // 添加西班牙语选项 + LanguageModel(name: 'spanish', alias: 'Español', value: 'es_ES'), // 添加西班牙语选项 LanguageModel( name: 'portuguese', alias: 'Português', value: 'pt_PT'), // 添加葡萄牙语 LanguageModel(name: 'japanese', alias: '日本語', value: 'ja_JP'), // 添加日语选项 @@ -23,14 +24,10 @@ final List settingsLanguageList = List.unmodifiable([ LanguageModel(name: 'persian', alias: 'فارسی', value: 'fa_IR'), // 波斯语 LanguageModel( name: 'vietnamese', alias: 'Tiếng Việt', value: 'vi_VN'), // 添加越南语选项 + LanguageModel(name: 'italian', alias: 'Italiano', value: 'it_IT'), // 添加意大利语选项 + LanguageModel(name: 'hindi', alias: 'हिन्दी', value: 'hi_IN'), // 添加印度语(印地语)选项 LanguageModel( - name: 'italian', alias: 'Italiano', value: 'it_IT'), // 添加意大利语选项 - LanguageModel( - name: 'hindi', alias: 'हिन्दी', value: 'hi_IN'), // 添加印度语(印地语)选项 - LanguageModel( - name: 'indonesian', - alias: 'Bahasa Indonesia', - value: 'id_ID'), // 添加印尼语选项 + name: 'indonesian', alias: 'Bahasa Indonesia', value: 'id_ID'), // 添加印尼语选项 LanguageModel(name: 'thai', alias: 'ไทย', value: 'th_TH'), // 添加泰语选项 LanguageModel( name: 'malay', alias: 'Bahasa Melayu', value: 'ms_MY'), // 添加马来语选项 @@ -45,21 +42,16 @@ final List settingsLanguageList = List.unmodifiable([ LanguageModel(name: 'hungarian', alias: 'Magyar', value: 'hu_HU'), // 匈牙利语 LanguageModel(name: 'norwegian', alias: 'Norsk', value: 'nb_NO'), // 挪威语 LanguageModel(name: 'romanian', alias: 'Română', value: 'ro_RO'), // 罗马尼亚语 - LanguageModel( - name: 'ukrainian', alias: 'Українська', value: 'uk_UA'), // 乌克兰语 + LanguageModel(name: 'ukrainian', alias: 'Українська', value: 'uk_UA'), // 乌克兰语 LanguageModel(name: 'greek', alias: 'Ελληνικά', value: 'el_GR'), // 希腊语 - LanguageModel( - name: 'bulgarian', alias: 'Български', value: 'bg_BG'), // 保加利亚语 + LanguageModel(name: 'bulgarian', alias: 'Български', value: 'bg_BG'), // 保加利亚语 LanguageModel(name: 'croatian', alias: 'Hrvatski', value: 'hr_HR'), // 克罗地亚语 LanguageModel(name: 'slovak', alias: 'Slovenský', value: 'sk_SK'), // 斯洛伐克语 LanguageModel( name: 'slovenian', alias: 'Slovenščina', value: 'sl_SI'), // 斯洛文尼亚语 - LanguageModel( - name: 'lithuanian', alias: 'Lietuvių', value: 'lt_LT'), // 立陶宛语 + LanguageModel(name: 'lithuanian', alias: 'Lietuvių', value: 'lt_LT'), // 立陶宛语 LanguageModel(name: 'latvian', alias: 'Latviešu', value: 'lv_LV'), // 拉脱维亚语 LanguageModel(name: 'estonian', alias: 'Eesti', value: 'et_EE'), // 爱沙尼亚语 - LanguageModel( - name: 'serbian', alias: 'Srpski', value: 'sr_RS'), // 塞尔维亚语(拉丁) + LanguageModel(name: 'serbian', alias: 'Srpski', value: 'sr_RS'), // 塞尔维亚语(拉丁) LanguageModel(name: 'icelandic', alias: 'Íslenska', value: 'is_IS'), // 冰岛语 ]); - diff --git a/lib/modules/settings/views/settings_view.dart b/lib/modules/settings/views/settings_view.dart index 5845336a0..b06d3c7b9 100644 --- a/lib/modules/settings/views/settings_view.dart +++ b/lib/modules/settings/views/settings_view.dart @@ -397,7 +397,8 @@ class SettingsView extends GetView { Obx( () => _buildSimpleNavigationSetting( title: 'languageSetting'.tr, // 语言设置 - subtitle: controller.language.value.name.tr, // 当前语言 + subtitle: + controller.currentLanguage.value.name.tr, // 当前语言 icon: Icons.language, iconBgColor: isDarkMode ? Colors.indigo[900]!.withValues(alpha: 0.3) @@ -1115,7 +1116,8 @@ class SettingsView extends GetView { children: controller.languageList.map((language) { return Obx(() { final isSelected = - controller.language.value.value == language.value; + controller.currentLanguage.value.value == + language.value; return GestureDetector( onTap: () { controller.setLanguage(language);