|
|
|
@ -2,8 +2,11 @@ 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(); |
|
|
|
@ -128,6 +131,32 @@ class ProfileController extends GetxController { |
|
|
|
); |
|
|
|
|
|
|
|
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<void> 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>(); |
|
|
|
settingsController.loadUserInfo(); |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
Logger().e('Error updating name: $e'); |
|
|
|
Get.snackbar('Error', 'Failed to update user name'); |
|
|
|
} |
|
|
|
} |
|
|
|
} |