import 'package:firebase_auth/firebase_auth.dart' as firebase; import 'package:get/get.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:get_storage/get_storage.dart'; import '../../../core/themes/theme_service.dart'; import '../../../data/services/speech_factory.dart'; import '../models/language_model.dart'; //import '../../../data/models/user_model.dart'; import '../../../data/models/user_Info.dart'; class SettingsController extends GetxController { // 语言设置 final List languageList = [ LanguageModel( name: 'followingSystem', // 跟随系统.tr alias: 'followingSystem', // 跟随系统.tr value: 'system'), LanguageModel(name: 'chinese', alias: '中文', value: 'zh_CN'), // 中文.tr LanguageModel(name: 'english', alias: 'English', value: 'en_US'), // 英语.tr ]; Rx language = LanguageModel().obs; final GetStorage _storage = GetStorage(); // 主题服务 final ThemeService _themeService = ThemeService(); // 是否是暗黑模式 final RxBool isDarkMode = false.obs; // 翻译语言对 final RxString sourceLanguage = '中文'.obs; final RxString targetLanguage = '英文'.obs; final List availableLanguages = [ '中文', '英文', '日文', '韩文', '法文', '德文', '西班牙文', '俄文' ]; // 语音服务类型 final Rx speechServiceType = SpeechServiceType.azure.obs; final List> availableSpeechServices = [ { 'type': SpeechServiceType.azure, 'name': 'azureVoiceService', // Azure 语音服务.tr 'description': 'azureVoiceServiceInfo' // 微软云端语音服务,支持高质量语音合成和识别.tr }, { 'type': SpeechServiceType.flutter, 'name': 'flutterVoiceService', // Flutter 本地语音服务.tr 'description': 'flutterVoiceServiceInfo' // 设备本地语音服务,无需联网即可使用.tr }, ]; RxString timbreName = '默认音色'.obs; //用户信息 static const String userKey = 'user_info'; //final _storage=GetStorage(); final ImagePicker _picker = ImagePicker(); final Rx userInfo = User.instance.obs; //使用单例实例 @override void onInit() { super.onInit(); // 获取系统语言 _getLanguage(); _getTimbre(); // 从存储中加载上次保存的主题设置 final savedDarkMode = _themeService.isSavedDarkMode(); // 设置当前主题状态 isDarkMode.value = savedDarkMode; // 获取当前语音服务类型 _loadCurrentSpeechServiceType(); //获取用户信息 loadUserInfo(); } void loadUserInfo() { final userJson = _storage.read(userKey); if (userJson != null) { userInfo.value = User.instance; } } Future saveUserInfo() async { await _storage.write(userKey, userInfo.value.toJson()); } Future updateUserAvatar() async { final XFile? image = await _picker.pickImage( source: ImageSource.gallery, maxWidth: 800, maxHeight: 800, imageQuality: 85, ); if (image != null) { userInfo.update((user) { if (user != null) { user.avatar = image.path; } }); await saveUserInfo(); } } Future updateUserName(String name) async { if (name.trim().isNotEmpty) { userInfo.update((user) { if (user != null) { user.name = name.trim(); } }); await saveUserInfo(); } } // Future updateDeviceName(String deviceName) async { // userInfo.update((user) { // if (user != null) { // user.deviceName = deviceName; // } // }); // await saveUserInfo(); // } // } void _getLanguage() { String? languageValue = _storage.read('language'); LanguageModel data = languageList.firstWhere( (element) => element.value == languageValue, orElse: () => languageList[0], ); language.value = data; } // 获取音色 void _getTimbre() { List? timbreList = _storage.read('timbreList'); String? timbre = _storage.read('timbre'); if (timbreList != null && timbre != null) { Map data = timbreList.firstWhere( (element) => element['type'] == timbre, orElse: () => {}, ); if (data.isNotEmpty) { timbreName.value = data['name']; } } } void setLanguage(LanguageModel data) { if (data.value != 'system') { List languageList = data.value.split('_'); Get.updateLocale(Locale(languageList[0], languageList[1])); } else { Get.updateLocale(Get.deviceLocale!); } language.value = data; _storage.write('language', data.value); Get.back(); } // 加载当前语音服务类型 void _loadCurrentSpeechServiceType() { try { final factory = Get.find(); speechServiceType.value = factory.currentServiceType; } catch (e) { // 如果找不到SpeechFactory实例,使用默认值 } } // 切换主题 Future toggleTheme() async { // 切换暗黑模式状态 isDarkMode.value = !isDarkMode.value; // 更新全局主题 Get.changeThemeMode(isDarkMode.value ? ThemeMode.dark : ThemeMode.light); // 保存用户选择的主题设置 - 确保立即写入存储 await _themeService.saveThemeMode(isDarkMode.value); } // 设置语音服务类型 void setSpeechServiceType(SpeechServiceType type) { try { final factory = Get.find(); factory.setServiceType(type); speechServiceType.value = type; } catch (e) { // 处理错误 } } void setSourceLanguage(String language) { sourceLanguage.value = language; } void setTargetLanguage(String language) { targetLanguage.value = language; } void swapLanguages() { final temp = sourceLanguage.value; sourceLanguage.value = targetLanguage.value; targetLanguage.value = temp; } void signOut() { // 在此实现退出登录逻辑 _storage.write("logintoken", ""); Get.offAllNamed('/login'); } }