import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:flutter/material.dart'; class ProfileController extends GetxController { static ProfileController get to => Get.find(); final _userName = ''.obs; final _email = ''.obs; final _avatar = ''.obs; final _isEditing = false.obs; final _storage = GetStorage(); // 使用响应式变量 final currentLanguage = 'zh'.obs; String get userName => _userName.value; String get email => _email.value; String get avatar => _avatar.value; bool get isEditing => _isEditing.value; @override void onInit() { super.onInit(); loadUserData(); loadLanguagePreference(); } void loadUserData() { try { _userName.value = _storage.read('userName') ?? 'User Name'; _email.value = _storage.read('userEmail') ?? 'user@example.com'; _avatar.value = _storage.read('userAvatar') ?? ''; } catch (e) { Get.snackbar('Error', 'Failed to load user data'); } } // 加载用户语言偏好设置 void loadLanguagePreference() { try { final String? languageCode = _storage.read('languageCode'); final String? countryCode = _storage.read('countryCode'); if (languageCode != null && countryCode != null) { Get.updateLocale(Locale(languageCode, countryCode)); currentLanguage.value = languageCode; } } catch (e) { print('Failed to load language preference: $e'); } } // 保存用户语言偏好设置 Future saveLanguagePreference(Locale locale) async { try { await _storage.write('languageCode', locale.languageCode); await _storage.write('countryCode', locale.countryCode); } catch (e) { print('Failed to save language preference: $e'); } } // 切换应用语言 void changeLanguage(String languageCode, String countryCode) { // 使用Future.delayed来避免在构建过程中更新UI Future.delayed(Duration.zero, () async { final locale = Locale(languageCode, countryCode); await saveLanguagePreference(locale); Get.updateLocale(locale); currentLanguage.value = languageCode; }); } Future updateUserData({ String? userName, String? email, String? avatar, }) async { try { if (userName != null) { await _storage.write('userName', userName); _userName.value = userName; } if (email != null) { await _storage.write('userEmail', email); _email.value = email; } if (avatar != null) { await _storage.write('userAvatar', avatar); _avatar.value = avatar; } Get.snackbar('Success', 'Profile updated successfully'); } catch (e) { Get.snackbar('Error', 'Failed to update profile'); } } void toggleEditing() { _isEditing.value = !_isEditing.value; } }