You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
2.8 KiB

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<void> 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<void> 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;
}
}