import 'package:get/get.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import '../../../core/themes/theme_service.dart'; import '../../../data/services/speech_factory.dart'; import 'package:get_storage/get_storage.dart'; import '../../../data/models/user_model.dart'; class SettingsController extends GetxController { // 主题服务 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': 'Azure 语音服务', 'description': '微软云端语音服务,支持高质量语音合成和识别'}, {'type': SpeechServiceType.flutter, 'name': 'Flutter 本地语音服务', 'description': '设备本地语音服务,无需联网即可使用'}, ]; //用户信息 static const String userKey='user_info'; final _storage=GetStorage(); final ImagePicker _picker=ImagePicker(); final Rx userInfo=UserModel.defaultUser().obs; @override void onInit() { super.onInit(); // 从存储中加载上次保存的主题设置 final savedDarkMode = _themeService.isSavedDarkMode(); // 设置当前主题状态 isDarkMode.value = savedDarkMode; // 获取当前语音服务类型 _loadCurrentSpeechServiceType(); //获取用户信息 loadUserInfo(); } void loadUserInfo() { final userJson = _storage.read(userKey); if (userJson != null) { userInfo.value = UserModel.fromJson(userJson); } } 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 _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() { // 在此实现退出登录逻辑 Get.offAllNamed('/login'); } }