Browse Source

优化更换头像

weicu
lxm 2 years ago
parent
commit
eb5b5bd45f
  1. 77
      lib/modules/profile/controllers/profile_controller.dart
  2. 2
      pubspec.yaml

77
lib/modules/profile/controllers/profile_controller.dart

@ -2,38 +2,41 @@ import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart'; import 'package:get_storage/get_storage.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:logger/logger.dart';
import '../../../data/models/user_model.dart'; import '../../../data/models/user_model.dart';
import '../../settings/controllers/settings_controller.dart'; import '../../settings/controllers/settings_controller.dart';
import 'dart:io';
import 'package:flutter_image_compress/flutter_image_compress.dart';
class ProfileController extends GetxController { class ProfileController extends GetxController {
static ProfileController get to => Get.find(); static ProfileController get to => Get.find();
// final _userName = ''.obs; // final _userName = ''.obs;
// final _email = ''.obs; // final _email = ''.obs;
// final _avatar = ''.obs; // final _avatar = ''.obs;
// final _isEditing = false.obs; // final _isEditing = false.obs;
// final _storage = GetStorage(); // final _storage = GetStorage();
//用户信息 //用户信息
static const String userKey='user_info'; static const String userKey = 'user_info';
final _storage=GetStorage(); final _storage = GetStorage();
final ImagePicker _picker=ImagePicker(); final ImagePicker _picker = ImagePicker();
final Rx<UserModel> userInfo=UserModel.defaultUser().obs; final Rx<UserModel> userInfo = UserModel.defaultUser().obs;
// 使用响应式变量 // 使用响应式变量
final currentLanguage = 'zh'.obs; final currentLanguage = 'zh'.obs;
// String get userName => _userName.value; // String get userName => _userName.value;
// String get email => _email.value; // String get email => _email.value;
// String get avatar => _avatar.value; // String get avatar => _avatar.value;
// bool get isEditing => _isEditing.value; // bool get isEditing => _isEditing.value;
@override @override
void onInit() { void onInit() {
super.onInit(); super.onInit();
loadUserInfo(); loadUserInfo();
loadLanguagePreference(); loadLanguagePreference();
} }
// void loadUserData() { // void loadUserData() {
// try { // try {
// _userName.value = _storage.read('userName') ?? 'User Name'; // _userName.value = _storage.read('userName') ?? 'User Name';
@ -43,13 +46,13 @@ class ProfileController extends GetxController {
// Get.snackbar('Error', 'Failed to load user data'); // Get.snackbar('Error', 'Failed to load user data');
// } // }
// } // }
// 加载用户语言偏好设置 // 加载用户语言偏好设置
void loadLanguagePreference() { void loadLanguagePreference() {
try { try {
final String? languageCode = _storage.read('languageCode'); final String? languageCode = _storage.read('languageCode');
final String? countryCode = _storage.read('countryCode'); final String? countryCode = _storage.read('countryCode');
if (languageCode != null && countryCode != null) { if (languageCode != null && countryCode != null) {
Get.updateLocale(Locale(languageCode, countryCode)); Get.updateLocale(Locale(languageCode, countryCode));
currentLanguage.value = languageCode; currentLanguage.value = languageCode;
@ -58,7 +61,7 @@ class ProfileController extends GetxController {
print('Failed to load language preference: $e'); print('Failed to load language preference: $e');
} }
} }
// 保存用户语言偏好设置 // 保存用户语言偏好设置
Future<void> saveLanguagePreference(Locale locale) async { Future<void> saveLanguagePreference(Locale locale) async {
try { try {
@ -68,7 +71,7 @@ class ProfileController extends GetxController {
print('Failed to save language preference: $e'); print('Failed to save language preference: $e');
} }
} }
// 切换应用语言 // 切换应用语言
void changeLanguage(String languageCode, String countryCode) { void changeLanguage(String languageCode, String countryCode) {
// 使用Future.delayed来避免在构建过程中更新UI // 使用Future.delayed来避免在构建过程中更新UI
@ -79,7 +82,7 @@ class ProfileController extends GetxController {
currentLanguage.value = languageCode; currentLanguage.value = languageCode;
}); });
} }
// Future<void> updateUserData({ // Future<void> updateUserData({
// String? userName, // String? userName,
// String? email, // String? email,
@ -103,12 +106,12 @@ class ProfileController extends GetxController {
// Get.snackbar('Error', 'Failed to update profile'); // Get.snackbar('Error', 'Failed to update profile');
// } // }
// } // }
// void toggleEditing() { // void toggleEditing() {
// _isEditing.value = !_isEditing.value; // _isEditing.value = !_isEditing.value;
// } // }
void loadUserInfo() { void loadUserInfo() {
final userJson = _storage.read(userKey); final userJson = _storage.read(userKey);
if (userJson != null) { if (userJson != null) {
userInfo.value = UserModel.fromJson(userJson); userInfo.value = UserModel.fromJson(userJson);
@ -126,8 +129,34 @@ class ProfileController extends GetxController {
maxHeight: 800, maxHeight: 800,
imageQuality: 85, imageQuality: 85,
); );
if (image != null) { if (image != null) {
// 检查文件大小
final file = File(image.path);
var fileSize = await file.length();
var quality = 85;
// 如果文件大于1MB,进行压缩
while (fileSize > 1024 * 1024 && quality > 30) {
final compressedImage = await FlutterImageCompress.compressAndGetFile(
file.absolute.path,
file.absolute.path, // 覆盖原文件
quality: quality,
minWidth: 800,
minHeight: 800,
);
if (compressedImage == null) {
Get.snackbar('错误', '图片压缩失败');
return;
}
//更新文件大小和质量
fileSize = await compressedImage.length();
quality -= 5;
Logger().d('压缩后文件大小:$fileSize');
}
userInfo.update((user) { userInfo.update((user) {
if (user != null) { if (user != null) {
user.avatar = image.path; user.avatar = image.path;
@ -143,12 +172,19 @@ class ProfileController extends GetxController {
} }
Future<void> updateUserName(String name) async { Future<void> updateUserName(String name) async {
if (name.trim().isNotEmpty) { if (name.trim().isEmpty) {
Logger().e('Invalid name: $name');
return;
}
try {
userInfo.update((user) { userInfo.update((user) {
if (user != null) { if (user != null) {
user.name = name.trim(); user.name = name.trim();
Logger().d('Name updated to: ${user.name}');
} }
}); });
await saveUserInfo(); await saveUserInfo();
// 同步更新 SettingsController // 同步更新 SettingsController
@ -156,6 +192,9 @@ class ProfileController extends GetxController {
final settingsController = Get.find<SettingsController>(); final settingsController = Get.find<SettingsController>();
settingsController.loadUserInfo(); settingsController.loadUserInfo();
} }
} catch (e) {
Logger().e('Error updating name: $e');
Get.snackbar('Error', 'Failed to update user name');
} }
} }
} }

2
pubspec.yaml

@ -50,6 +50,8 @@ dependencies:
lottie: ^3.3.1 lottie: ^3.3.1
app_settings: 5.2.0 app_settings: 5.2.0
speech_to_text: ^7.0.0 speech_to_text: ^7.0.0
flutter_image_compress: ^2.4.0
# image_cropper: ^9.0.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

Loading…
Cancel
Save