main_repository.dart 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import 'package:domain/entity/feedback_detail_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/log_utils.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. import '../entity/feedback_list_entity.dart';
  11. import '../entity/id_name_entity.dart';
  12. part 'main_repository.g.dart';
  13. @Riverpod(keepAlive: true)
  14. MainRepository mainRepository(Ref ref) {
  15. final dioEngine = ref.watch(dioEngineProvider);
  16. return MainRepository(dioEngine: dioEngine);
  17. }
  18. /*
  19. * 首页的数据仓库
  20. */
  21. class MainRepository {
  22. DioEngine dioEngine;
  23. MainRepository({required this.dioEngine});
  24. /// 获取反馈的分类
  25. Future<HttpResult<IdNameEntity>> fetchFeedbackCategory({
  26. CancelToken? cancelToken,
  27. }) async {
  28. final result = await dioEngine.requestNetResult(
  29. ApiConstants.apiFeedbackCategory,
  30. method: HttpMethod.GET,
  31. isShowLoadingDialog: true,
  32. networkDebounce: true,
  33. cancelToken: cancelToken,
  34. );
  35. if (result.isSuccess) {
  36. final jsonList = result.getListJson();
  37. //获取List数据 需要转换一次
  38. var list = jsonList
  39. ?.map((value) {
  40. if (value is Map<String, dynamic>) {
  41. return IdNameEntity.fromJson(value);
  42. } else {
  43. return null;
  44. }
  45. })
  46. .where((item) => item != null)
  47. .cast<IdNameEntity>()
  48. .toList();
  49. return result.convert<IdNameEntity>(list: list);
  50. }
  51. return result.convert<IdNameEntity>();
  52. }
  53. /// 发布反馈
  54. Future<HttpResult> postFeedback({
  55. required String? categoryId,
  56. required String? title,
  57. required String? content,
  58. List<String>? paths,
  59. CancelToken? cancelToken,
  60. }) async {
  61. Map<String, String> params = {};
  62. params['category_id'] = categoryId!;
  63. params['title'] = title!;
  64. params['content'] = content!;
  65. Map<String, String> files = {};
  66. if (paths != null && paths.isNotEmpty) {
  67. paths.asMap().forEach((index, path) {
  68. files["resources[$index]"] = path;
  69. });
  70. }
  71. final result = await dioEngine.requestNetResult(
  72. ApiConstants.apiFeedbackPost,
  73. params: params,
  74. paths: files,
  75. method: HttpMethod.POST,
  76. isShowLoadingDialog: true,
  77. networkDebounce: true,
  78. cancelToken: cancelToken,
  79. );
  80. if (result.isSuccess) {
  81. return result.convert();
  82. }
  83. return result.convert();
  84. }
  85. /// 已发布的反馈列表
  86. Future<HttpResult<FeedbackListEntity>> fetchFeedbackList({
  87. required String status,
  88. required int curPage,
  89. CancelToken? cancelToken,
  90. }) async {
  91. Map<String, String> params = {};
  92. params['status'] = status;
  93. params['page'] = curPage.toString();
  94. params['limit'] = "10";
  95. final result = await dioEngine.requestNetResult(
  96. ApiConstants.apiFeedbackList,
  97. params: params,
  98. method: HttpMethod.GET,
  99. cancelToken: cancelToken,
  100. );
  101. if (result.isSuccess) {
  102. final json = result.getDataJson();
  103. var data = FeedbackListEntity.fromJson(json!);
  104. return result.convert<FeedbackListEntity>(data: data);
  105. }
  106. return result.convert();
  107. }
  108. /// 获取反馈详情
  109. Future<HttpResult<FeedbackDetailEntity>> fetchFeedbackDetail({
  110. required String? id,
  111. CancelToken? cancelToken,
  112. }) async {
  113. Map<String, String> params = {};
  114. params['id'] = id??"";
  115. final result = await dioEngine.requestNetResult(
  116. ApiConstants.apiFeedbackDetail,
  117. method: HttpMethod.GET,
  118. params: params,
  119. isShowLoadingDialog: true,
  120. networkDebounce: true,
  121. cancelToken: cancelToken,
  122. );
  123. if (result.isSuccess) {
  124. final json = result.getDataJson();
  125. var data = FeedbackDetailEntity.fromJson(json!);
  126. return result.convert<FeedbackDetailEntity>(data: data);
  127. }
  128. return result.convert();
  129. }
  130. }