main_repository.dart 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. import 'package:domain/entity/feedback_detail_entity.dart';
  2. import 'package:domain/entity/home_list_entity.dart';
  3. import 'package:domain/entity/latest_news_detail_entity.dart';
  4. import 'package:domain/entity/latest_news_page_entity.dart';
  5. import 'package:domain/entity/visitor_page_entity.dart';
  6. import 'package:plugin_platform/platform_export.dart';
  7. import 'package:plugin_platform/http/dio_engine.dart';
  8. import 'package:plugin_platform/http/http_result.dart';
  9. import 'package:riverpod_annotation/riverpod_annotation.dart';
  10. import 'package:shared/utils/log_utils.dart';
  11. import 'package:shared/utils/util.dart';
  12. import '../constants/api_constants.dart';
  13. import 'package:flutter_riverpod/flutter_riverpod.dart';
  14. import 'package:plugin_basic/provider/http_provider/http_provider.dart';
  15. import '../entity/feedback_list_entity.dart';
  16. import '../entity/id_name_entity.dart';
  17. part 'main_repository.g.dart';
  18. @Riverpod(keepAlive: true)
  19. MainRepository mainRepository(Ref ref) {
  20. final dioEngine = ref.watch(dioEngineProvider);
  21. return MainRepository(dioEngine: dioEngine);
  22. }
  23. /*
  24. * 首页的数据仓库
  25. */
  26. class MainRepository {
  27. DioEngine dioEngine;
  28. MainRepository({required this.dioEngine});
  29. /// 获取反馈的分类
  30. Future<HttpResult<IdNameEntity>> fetchFeedbackCategory({
  31. CancelToken? cancelToken,
  32. }) async {
  33. final result = await dioEngine.requestNetResult(
  34. ApiConstants.apiFeedbackCategory,
  35. method: HttpMethod.GET,
  36. isShowLoadingDialog: true,
  37. networkDebounce: true,
  38. cancelToken: cancelToken,
  39. );
  40. if (result.isSuccess) {
  41. final jsonList = result.getListJson();
  42. //获取List数据 需要转换一次
  43. var list = jsonList
  44. ?.map((value) {
  45. if (value is Map<String, dynamic>) {
  46. return IdNameEntity.fromJson(value);
  47. } else {
  48. return null;
  49. }
  50. })
  51. .where((item) => item != null)
  52. .cast<IdNameEntity>()
  53. .toList();
  54. return result.convert<IdNameEntity>(list: list);
  55. }
  56. return result.convert<IdNameEntity>();
  57. }
  58. /// 发布反馈
  59. Future<HttpResult> postFeedback({
  60. required String? categoryId,
  61. required String? title,
  62. required String? content,
  63. List<String>? paths,
  64. CancelToken? cancelToken,
  65. }) async {
  66. Map<String, String> params = {};
  67. params['category_id'] = categoryId!;
  68. params['title'] = title!;
  69. params['content'] = content!;
  70. Map<String, String> files = {};
  71. if (paths != null && paths.isNotEmpty) {
  72. paths.asMap().forEach((index, path) {
  73. files["resources[$index]"] = path;
  74. });
  75. }
  76. final result = await dioEngine.requestNetResult(
  77. ApiConstants.apiFeedbackPost,
  78. params: params,
  79. paths: files,
  80. method: HttpMethod.POST,
  81. isShowLoadingDialog: true,
  82. networkDebounce: true,
  83. cancelToken: cancelToken,
  84. );
  85. if (result.isSuccess) {
  86. return result.convert();
  87. }
  88. return result.convert();
  89. }
  90. /// 已发布的反馈列表
  91. Future<HttpResult<FeedbackListEntity>> fetchFeedbackList({
  92. required String status,
  93. required int curPage,
  94. CancelToken? cancelToken,
  95. }) async {
  96. Map<String, String> params = {};
  97. params['status'] = status;
  98. params['page'] = curPage.toString();
  99. params['limit'] = "10";
  100. final result = await dioEngine.requestNetResult(
  101. ApiConstants.apiFeedbackList,
  102. params: params,
  103. method: HttpMethod.GET,
  104. cancelToken: cancelToken,
  105. );
  106. if (result.isSuccess) {
  107. final json = result.getDataJson();
  108. var data = FeedbackListEntity.fromJson(json!);
  109. return result.convert<FeedbackListEntity>(data: data);
  110. }
  111. return result.convert();
  112. }
  113. /// 获取反馈详情
  114. Future<HttpResult<FeedbackDetailEntity>> fetchFeedbackDetail({
  115. required String? id,
  116. CancelToken? cancelToken,
  117. }) async {
  118. Map<String, String> params = {};
  119. params['id'] = id ?? "";
  120. final result = await dioEngine.requestNetResult(
  121. ApiConstants.apiFeedbackDetail,
  122. method: HttpMethod.GET,
  123. params: params,
  124. isShowLoadingDialog: true,
  125. networkDebounce: true,
  126. cancelToken: cancelToken,
  127. );
  128. if (result.isSuccess) {
  129. final json = result.getDataJson();
  130. var data = FeedbackDetailEntity.fromJson(json!);
  131. return result.convert<FeedbackDetailEntity>(data: data);
  132. }
  133. return result.convert();
  134. }
  135. /// 创建访客的信息
  136. Future<HttpResult> createVisitor({
  137. required String? name,
  138. required String? phone,
  139. required String? nric,
  140. required String? vehicleNumber,
  141. required String? accessDate,
  142. required String? note,
  143. CancelToken? cancelToken,
  144. }) async {
  145. Map<String, String> params = {};
  146. params['name'] = name ?? "";
  147. params['phone'] = phone ?? "";
  148. params['nric'] = nric ?? "";
  149. params['access_date'] = accessDate ?? "";
  150. if (Utils.isNotEmpty(vehicleNumber)) {
  151. params['vehicle_number'] = vehicleNumber!;
  152. }
  153. if (Utils.isNotEmpty(note)) {
  154. params['note'] = note!;
  155. }
  156. final result = await dioEngine.requestNetResult(
  157. ApiConstants.apiCreateVisitor,
  158. params: params,
  159. method: HttpMethod.POST,
  160. isShowLoadingDialog: true,
  161. networkDebounce: true,
  162. cancelToken: cancelToken,
  163. );
  164. if (result.isSuccess) {
  165. return result.convert();
  166. }
  167. return result.convert();
  168. }
  169. /// 已创建的访客列表
  170. Future<HttpResult<VisitorPageEntity>> fetchVisitorList({
  171. required String type,
  172. required int curPage,
  173. CancelToken? cancelToken,
  174. }) async {
  175. Map<String, String> params = {};
  176. params['type'] = type;
  177. params['page'] = curPage.toString();
  178. params['limit'] = "10";
  179. final result = await dioEngine.requestNetResult(
  180. ApiConstants.apiVisitorList,
  181. params: params,
  182. method: HttpMethod.GET,
  183. cancelToken: cancelToken,
  184. );
  185. if (result.isSuccess) {
  186. final json = result.getDataJson();
  187. var data = VisitorPageEntity.fromJson(json!);
  188. return result.convert<VisitorPageEntity>(data: data);
  189. }
  190. return result.convert();
  191. }
  192. /// 首页列表的获取
  193. Future<HttpResult<HomeListEntity>> fetchHomeIndex({
  194. bool needLoading = true,
  195. CancelToken? cancelToken,
  196. }) async {
  197. final result = await dioEngine.requestNetResult(
  198. ApiConstants.apiHomeList,
  199. method: HttpMethod.GET,
  200. isShowLoadingDialog: needLoading,
  201. networkDebounce: true,
  202. cancelToken: cancelToken,
  203. );
  204. if (result.isSuccess) {
  205. final json = result.getDataJson();
  206. var data = HomeListEntity.fromJson(json!);
  207. return result.convert<HomeListEntity>(data: data);
  208. }
  209. return result.convert();
  210. }
  211. /// 获取首页最新新闻的列表
  212. Future<HttpResult<LatestNewsPageEntity>> fetchLatestNewsList({
  213. required String type,
  214. required int curPage,
  215. CancelToken? cancelToken,
  216. }) async {
  217. Map<String, String> params = {};
  218. params['page'] = curPage.toString();
  219. params['limit'] = "10";
  220. params['type'] = type.toString();
  221. final result = await dioEngine.requestNetResult(
  222. ApiConstants.apiLatestNewsList,
  223. params: params,
  224. method: HttpMethod.GET,
  225. cancelToken: cancelToken,
  226. );
  227. if (result.isSuccess) {
  228. final json = result.getDataJson();
  229. var data = LatestNewsPageEntity.fromJson(json!);
  230. return result.convert<LatestNewsPageEntity>(data: data);
  231. }
  232. return result.convert();
  233. }
  234. /// 获取首页最新新闻的详情
  235. Future<HttpResult<LatestNewsDetailEntity>> fetchLatestNewsDetail({
  236. required String id,
  237. CancelToken? cancelToken,
  238. }) async {
  239. Map<String, String> params = {};
  240. params['id'] = id;
  241. final result = await dioEngine.requestNetResult(
  242. ApiConstants.apiLatestNewsDetail,
  243. params: params,
  244. method: HttpMethod.GET,
  245. isShowLoadingDialog: true,
  246. networkDebounce: true,
  247. cancelToken: cancelToken,
  248. );
  249. if (result.isSuccess) {
  250. final json = result.getDataJson();
  251. var data = LatestNewsDetailEntity.fromJson(json!);
  252. return result.convert<LatestNewsDetailEntity>(data: data);
  253. }
  254. return result.convert();
  255. }
  256. }