|
|
|
@ -1,40 +1,47 @@ |
|
|
|
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'; |
|
|
|
|
|
|
|
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 _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; |
|
|
|
// 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(); |
|
|
|
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 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() { |
|
|
|
@ -72,31 +79,71 @@ class ProfileController extends GetxController { |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
Future<void> updateUserData({ |
|
|
|
String? userName, |
|
|
|
String? email, |
|
|
|
String? avatar, |
|
|
|
}) async { |
|
|
|
try { |
|
|
|
if (userName != null) { |
|
|
|
await _storage.write('userName', userName); |
|
|
|
_userName.value = userName; |
|
|
|
// 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); |
|
|
|
} |
|
|
|
} |
|
|
|
if (email != null) { |
|
|
|
await _storage.write('userEmail', email); |
|
|
|
_email.value = email; |
|
|
|
|
|
|
|
Future<void> saveUserInfo() async { |
|
|
|
await _storage.write(userKey, userInfo.value.toJson()); |
|
|
|
} |
|
|
|
if (avatar != null) { |
|
|
|
await _storage.write('userAvatar', avatar); |
|
|
|
_avatar.value = avatar; |
|
|
|
|
|
|
|
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; |
|
|
|
} |
|
|
|
Get.snackbar('Success', 'Profile updated successfully'); |
|
|
|
} catch (e) { |
|
|
|
Get.snackbar('Error', 'Failed to update profile'); |
|
|
|
}); |
|
|
|
await saveUserInfo(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void toggleEditing() { |
|
|
|
_isEditing.value = !_isEditing.value; |
|
|
|
Future<void> updateUserName(String name) async { |
|
|
|
if (name.trim().isNotEmpty) { |
|
|
|
userInfo.update((user) { |
|
|
|
if (user != null) { |
|
|
|
user.name = name.trim(); |
|
|
|
} |
|
|
|
}); |
|
|
|
await saveUserInfo(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |