profile_repository.dart 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import 'package:domain/entity/user_me_entity.dart';
  2. import 'package:plugin_platform/platform_export.dart';
  3. import 'package:plugin_platform/http/dio_engine.dart';
  4. import 'package:plugin_platform/http/http_result.dart';
  5. import 'package:riverpod_annotation/riverpod_annotation.dart';
  6. import 'package:shared/utils/util.dart';
  7. import '../constants/api_constants.dart';
  8. import 'package:flutter_riverpod/flutter_riverpod.dart';
  9. import 'package:plugin_basic/provider/http_provider/http_provider.dart';
  10. part 'profile_repository.g.dart';
  11. @Riverpod(keepAlive: true)
  12. ProfileRepository profileRepository(Ref ref) {
  13. final dioEngine = ref.watch(dioEngineProvider);
  14. return ProfileRepository(dioEngine: dioEngine);
  15. }
  16. /*
  17. * 用户详情的数据仓库
  18. */
  19. class ProfileRepository {
  20. DioEngine dioEngine;
  21. ProfileRepository({required this.dioEngine});
  22. /// 获取用户详情
  23. Future<HttpResult<UserMeEntity>> fetchUserInfo({
  24. CancelToken? cancelToken,
  25. }) async {
  26. final result = await dioEngine.requestNetResult(
  27. ApiConstants.apiProfileInfo,
  28. method: HttpMethod.GET,
  29. cancelToken: cancelToken,
  30. );
  31. if (result.isSuccess) {
  32. final json = result.getDataJson();
  33. var data = UserMeEntity.fromJson(json!);
  34. return result.convert<UserMeEntity>(data: data);
  35. }
  36. return result.convert();
  37. }
  38. /// 更新用户信息
  39. Future<HttpResult> updateProfile({
  40. required String? firstName,
  41. required String? lastName,
  42. required String? email,
  43. required String? avatarPath,
  44. CancelToken? cancelToken,
  45. }) async {
  46. Map<String, String> params = {};
  47. params['first_name'] = firstName!;
  48. params['last_name'] = lastName!;
  49. params['email'] = email!;
  50. Map<String, String> paths = {};
  51. //如果是链接通过params传参
  52. if (avatarPath != null && avatarPath.startsWith("http")) {
  53. params['avatar'] = avatarPath;
  54. } else {
  55. //如果是文件通过Path传参
  56. paths['avatar'] = avatarPath ?? "";
  57. }
  58. final result = await dioEngine.requestNetResult(
  59. ApiConstants.apiUpdateProfile,
  60. params: params,
  61. paths: paths,
  62. method: HttpMethod.POST,
  63. isShowLoadingDialog: true,
  64. networkDebounce: true,
  65. cancelToken: cancelToken,
  66. );
  67. if (result.isSuccess) {
  68. return result.convert();
  69. }
  70. return result.convert();
  71. }
  72. /// 获取用户的默认头像列表
  73. Future<HttpResult<String>> fetchDefaultAvatar({
  74. CancelToken? cancelToken,
  75. }) async {
  76. final result = await dioEngine.requestNetResult(
  77. ApiConstants.apiDefaultAvatar,
  78. method: HttpMethod.GET,
  79. cancelToken: cancelToken,
  80. );
  81. if (result.isSuccess) {
  82. final jsonList = result.getListJson();
  83. List<String> stringList = [];
  84. if (jsonList != null) {
  85. stringList = jsonList
  86. .map((value) {
  87. // 假设 value 是字符串类型,直接返回
  88. if (value is String) {
  89. return value;
  90. }
  91. return null;
  92. })
  93. .where((item) => item != null)
  94. .cast<String>()
  95. .toList();
  96. }
  97. return result.convert<String>(list: stringList);
  98. }
  99. return result.convert<String>();
  100. }
  101. /// 修改手机号码
  102. Future<HttpResult> changeMobilePhone({
  103. required String? smsCode,
  104. required String? countryCode,
  105. required String? phone,
  106. CancelToken? cancelToken,
  107. }) async {
  108. Map<String, String> params = {};
  109. params['sms_code'] = smsCode!;
  110. params['country_code'] = countryCode!;
  111. params['phone'] = phone!;
  112. final result = await dioEngine.requestNetResult(
  113. ApiConstants.apiChangeMobile,
  114. params: params,
  115. method: HttpMethod.POST,
  116. isShowLoadingDialog: true,
  117. networkDebounce: true,
  118. cancelToken: cancelToken,
  119. );
  120. if (result.isSuccess) {
  121. return result.convert();
  122. }
  123. return result.convert();
  124. }
  125. }