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