diff --git a/lib/modules/profile/controllers/profile_controller.dart b/lib/modules/profile/controllers/profile_controller.dart index a75f87ee9..083d9b9e4 100644 --- a/lib/modules/profile/controllers/profile_controller.dart +++ b/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:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; +import 'package:logger/logger.dart'; import '../../../data/models/user_model.dart'; import '../../settings/controllers/settings_controller.dart'; +import 'dart:io'; +import 'package:flutter_image_compress/flutter_image_compress.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 userInfo=UserModel.defaultUser().obs; - + static const String userKey = 'user_info'; + final _storage = GetStorage(); + final ImagePicker _picker = ImagePicker(); + final Rx 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'; @@ -43,13 +46,13 @@ class ProfileController extends GetxController { // 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; @@ -58,7 +61,7 @@ class ProfileController extends GetxController { print('Failed to load language preference: $e'); } } - + // 保存用户语言偏好设置 Future saveLanguagePreference(Locale locale) async { try { @@ -68,7 +71,7 @@ class ProfileController extends GetxController { print('Failed to save language preference: $e'); } } - + // 切换应用语言 void changeLanguage(String languageCode, String countryCode) { // 使用Future.delayed来避免在构建过程中更新UI @@ -79,7 +82,7 @@ class ProfileController extends GetxController { currentLanguage.value = languageCode; }); } - + // Future updateUserData({ // String? userName, // String? email, @@ -103,12 +106,12 @@ class ProfileController extends GetxController { // Get.snackbar('Error', 'Failed to update profile'); // } // } - + // void toggleEditing() { // _isEditing.value = !_isEditing.value; // } - void loadUserInfo() { + void loadUserInfo() { final userJson = _storage.read(userKey); if (userJson != null) { userInfo.value = UserModel.fromJson(userJson); @@ -126,8 +129,34 @@ class ProfileController extends GetxController { maxHeight: 800, imageQuality: 85, ); - + 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) { if (user != null) { user.avatar = image.path; @@ -143,12 +172,19 @@ class ProfileController extends GetxController { } Future updateUserName(String name) async { - if (name.trim().isNotEmpty) { + if (name.trim().isEmpty) { + Logger().e('Invalid name: $name'); + return; + } + + try { userInfo.update((user) { if (user != null) { user.name = name.trim(); + Logger().d('Name updated to: ${user.name}'); } }); + await saveUserInfo(); // 同步更新 SettingsController @@ -156,6 +192,9 @@ class ProfileController extends GetxController { final settingsController = Get.find(); settingsController.loadUserInfo(); } + } catch (e) { + Logger().e('Error updating name: $e'); + Get.snackbar('Error', 'Failed to update user name'); } } -} \ No newline at end of file +} diff --git a/pubspec.yaml b/pubspec.yaml index ba0a93491..b91f3a678 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -50,6 +50,8 @@ dependencies: lottie: ^3.3.1 app_settings: 5.2.0 speech_to_text: ^7.0.0 + flutter_image_compress: ^2.4.0 + # image_cropper: ^9.0.0 dev_dependencies: flutter_test: