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.

161 lines
4.5 KiB

import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import '../../../data/models/user_model.dart';
import '../../settings/controllers/settings_controller.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();
//用户信息
static const String userKey='user_info';
final _storage=GetStorage();
final ImagePicker _picker=ImagePicker();
final Rx<UserModel> userInfo=UserModel.defaultUser().obs;
// 使用响应式变量
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();
loadUserInfo();
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;
// }
void loadUserInfo() {
final userJson = _storage.read(userKey);
if (userJson != null) {
userInfo.value = UserModel.fromJson(userJson);
}
}
Future<void> saveUserInfo() async {
await _storage.write(userKey, userInfo.value.toJson());
}
Future<void> 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();
// 通知 SettingsController 更新
if (Get.isRegistered<SettingsController>()) {
Get.find<SettingsController>().loadUserInfo();
}
}
}
Future<void> updateUserName(String name) async {
if (name.trim().isNotEmpty) {
userInfo.update((user) {
if (user != null) {
user.name = name.trim();
}
});
await saveUserInfo();
// 同步更新 SettingsController
if (Get.isRegistered<SettingsController>()) {
final settingsController = Get.find<SettingsController>();
settingsController.loadUserInfo();
}
}
}
}