diff --git a/lib/data/models/auth_model.dart b/lib/data/models/auth_model.dart index fa1b2a6..0e6b3ed 100644 --- a/lib/data/models/auth_model.dart +++ b/lib/data/models/auth_model.dart @@ -51,3 +51,26 @@ class LoginResponse { ); } } + +class Profile { + final String id; + final String name; + final String? email; + final String? signatureImage; + + Profile({ + required this.id, + required this.name, + this.email, + this.signatureImage, + }); + + factory Profile.fromJson(Map json) { + return Profile( + id: json['id'] as String, + name: json['name'] as String, + email: json['email'] as String?, + signatureImage: json['signatureImage'] as String?, + ); + } +} diff --git a/lib/data/repositories/my_repository.dart b/lib/data/repositories/my_repository.dart new file mode 100644 index 0000000..2bd97aa --- /dev/null +++ b/lib/data/repositories/my_repository.dart @@ -0,0 +1,26 @@ +import 'package:dio/dio.dart'; +import 'package:problem_check_system/data/models/auth_model.dart'; +import 'package:problem_check_system/data/providers/dio_provider.dart'; + +class MyRepository { + final DioProvider dioProvider; + + MyRepository({required this.dioProvider}); + + /// 从 API 获取用户个人资料 + Future getUserProfile() async { + try { + final response = await dioProvider.get('/api/Accounts/Profile'); + + // 将 JSON 数据反序列化为 Profile 模型 + return Profile.fromJson(response.data); + } on DioException catch (e) { + // 专门处理网络错误,例如无网络连接、超时等 + // DioException 包含了更详细的错误信息 + throw Exception('Network error: ${e.message}'); + } catch (e) { + // 捕获所有其他未知错误 + rethrow; // 重新抛出异常,让调用者来处理 + } + } +} diff --git a/lib/modules/home/bindings/home_binding.dart b/lib/modules/home/bindings/home_binding.dart index 8b3e17f..dfe9049 100644 --- a/lib/modules/home/bindings/home_binding.dart +++ b/lib/modules/home/bindings/home_binding.dart @@ -2,6 +2,7 @@ import 'package:get/get.dart'; import 'package:problem_check_system/data/providers/connectivity_provider.dart'; import 'package:problem_check_system/data/providers/local_database.dart'; import 'package:problem_check_system/data/repositories/auth_repository.dart'; +import 'package:problem_check_system/data/repositories/my_repository.dart'; import 'package:problem_check_system/modules/auth/controllers/auth_controller.dart'; import 'package:problem_check_system/modules/home/controllers/home_controller.dart'; import 'package:problem_check_system/modules/my/controllers/my_controller.dart'; @@ -24,7 +25,8 @@ class HomeBinding implements Bindings { ), fenix: true, ); - Get.lazyPut(() => MyController()); + Get.lazyPut(() => MyRepository(dioProvider: Get.find())); + Get.lazyPut(() => MyController(myRepository: Get.find())); Get.lazyPut( () => AuthRepository( dioProvider: Get.find(), diff --git a/lib/modules/my/bingdings/my_binding.dart b/lib/modules/my/bingdings/my_binding.dart index e00442a..bc057b6 100644 --- a/lib/modules/my/bingdings/my_binding.dart +++ b/lib/modules/my/bingdings/my_binding.dart @@ -1,9 +1,8 @@ import 'package:get/get.dart'; +import 'package:problem_check_system/data/repositories/my_repository.dart'; import 'package:problem_check_system/modules/my/controllers/my_controller.dart'; class MyBinding implements Bindings { @override - void dependencies() { - Get.lazyPut(() => MyController()); - } + void dependencies() {} } diff --git a/lib/modules/my/controllers/my_controller.dart b/lib/modules/my/controllers/my_controller.dart index e791b85..da319b1 100644 --- a/lib/modules/my/controllers/my_controller.dart +++ b/lib/modules/my/controllers/my_controller.dart @@ -1,10 +1,15 @@ import 'package:get/get.dart'; -import 'package:get_storage/get_storage.dart'; +import 'package:problem_check_system/data/repositories/my_repository.dart'; class MyController extends GetxController { + final MyRepository myRepository; + + MyController({required this.myRepository}); + // 响应式变量,用于存储用户信息 var userName = '张兰雪'.obs; var userPhone = '138****8547'.obs; + var userImage = "".obs; @override void onInit() { @@ -13,21 +18,11 @@ class MyController extends GetxController { } // 从本地存储或API加载用户信息 - void _loadUserInfo() { - // 假设你从 GetStorage 中读取用户信息 - final box = GetStorage(); - final storedUserName = box.read('userName'); - final storedUserPhone = box.read('userPhone'); - - if (storedUserName != null) { - userName.value = storedUserName; - } - if (storedUserPhone != null) { - // 可以在此处对手机号进行格式化处理 - userPhone.value = storedUserPhone; - } - - // 或者,你也可以在这里调用 API 来获取用户信息 + Future _loadUserInfo() async { + var userProfile = await myRepository.getUserProfile(); + userName.value = userProfile.name; + userPhone.value = userProfile.email ?? '138****8547'; + userImage.value = userProfile.signatureImage.toString(); } // 未来可以添加更新用户信息的逻辑 diff --git a/lib/modules/my/views/my_page.dart b/lib/modules/my/views/my_page.dart index 7521d0f..79424af 100644 --- a/lib/modules/my/views/my_page.dart +++ b/lib/modules/my/views/my_page.dart @@ -97,10 +97,45 @@ class MyPage extends StatelessWidget { width: 1.w, ), ), - child: const Icon( - Icons.person, - size: 40, - color: Color(0xFFC8E0FF), + // child: const Icon( + // Icons.person, + // size: 40, + // color: Color(0xFFC8E0FF), + // ), + child: Image.network( + controller.userImage.value, + // Show a CircularProgressIndicator while the image is loading + loadingBuilder: + ( + BuildContext context, + Widget child, + ImageChunkEvent? loadingProgress, + ) { + if (loadingProgress == null) { + return child; + } + return Center( + child: CircularProgressIndicator( + value: loadingProgress.expectedTotalBytes != null + ? loadingProgress.cumulativeBytesLoaded / + loadingProgress.expectedTotalBytes! + : null, + ), + ); + }, + // Show a placeholder icon if the image fails to load + errorBuilder: + ( + BuildContext context, + Object exception, + StackTrace? stackTrace, + ) { + return const Icon( + Icons.person, + size: 40, + color: Color(0xFFC8E0FF), + ); + }, ), ), SizedBox(width: 15.w),