You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
4.7KB

  1. import 'dart:io';
  2. import 'package:dio/dio.dart';
  3. import 'package:dio_http_cache/dio_http_cache.dart';
  4. import 'package:farm_tpf/custom_model/CropPlot.dart';
  5. import 'package:farm_tpf/custom_model/Device.dart';
  6. import 'package:farm_tpf/custom_model/Harvest.dart';
  7. import 'package:farm_tpf/custom_model/WaterType.dart';
  8. import 'package:farm_tpf/custom_model/user.dart';
  9. import 'package:farm_tpf/custom_model/user_request.dart';
  10. import 'package:farm_tpf/data/api/app_exception.dart';
  11. import 'package:farm_tpf/data/api/dio_provider.dart';
  12. import 'package:farm_tpf/data/api/rest_client.dart';
  13. import 'package:farm_tpf/models/PagedResult.dart';
  14. import 'package:farm_tpf/models/Supply.dart';
  15. import 'package:farm_tpf/models/index.dart';
  16. import 'package:farm_tpf/utils/const_common.dart';
  17. import 'package:flutter/material.dart';
  18. class Repository {
  19. final dio = DioProvider.instance();
  20. Future<List<ActionType>> getActionTypes() {
  21. final client = RestClient(dio);
  22. var op = buildConfigurableCacheOptions(
  23. forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  24. return client.getActionTypes(options: op);
  25. }
  26. Future<List<Harvest>> getHarvests() {
  27. final client = RestClient(dio);
  28. var op = buildConfigurableCacheOptions(
  29. forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  30. return client.getHarvests(options: op);
  31. }
  32. Future<List<WaterType>> getWaterTypes() {
  33. final client = RestClient(dio);
  34. var op = buildConfigurableCacheOptions(
  35. forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  36. return client.getWaterTypes(options: op);
  37. }
  38. Future<CropPlot> getPlotDetail(int cropId, {int page, int size}) {
  39. final client = RestClient(dio);
  40. return client.getCropDetail(cropId, page: page, size: size);
  41. }
  42. Future<CropPlot> getPlotDetailByCode(String cropCode, {int page, int size}) {
  43. final client = RestClient(dio);
  44. return client.getCropDetailByCode(cropCode, page: page, size: size);
  45. }
  46. Future<List<Crop>> getPlots({int page, int size, String searchString}) {
  47. final client = RestClient(dio);
  48. return client.getPlots(page: page, size: size, query: searchString);
  49. }
  50. Future<void> updatePlot(TbCropDTO tbCropDTO) {
  51. final client = RestClient(dio);
  52. return client.updateCrop(tbCropDTO);
  53. }
  54. Future<User> signInWithCredentials(String username, String password) {
  55. final client = RestClient(dio);
  56. return client.login(UserRequest(username: username, password: password));
  57. }
  58. Future<PagedResult<T>> getInfinityList<T>(String url,
  59. {int page = 0, int size = 20}) async {
  60. var initUrl = "/api/activities/latest-env-by-activity-type/1/2";
  61. var url =
  62. ConstCommon.baseUrl + initUrl + "?page=$page&paged=true&size=$size";
  63. var response = await dio.get(url);
  64. final value = PagedResult<T>.fromJson(response.data, getInstanceClass());
  65. return value;
  66. }
  67. Future<List<Supply>> getSupplies(String type) async {
  68. final client = RestClient(dio);
  69. return client.getSupplies(type);
  70. }
  71. Object getInstanceClass() {
  72. var instanceClass;
  73. if (1 == 1) {
  74. instanceClass = new Crop();
  75. }
  76. return instanceClass;
  77. }
  78. //Action
  79. Future<void> createAction(
  80. Function(dynamic) onSuccess, Function(String) onError,
  81. {String apiAddAction,
  82. String paramActivity,
  83. String activityAction,
  84. List<String> filePaths}) async {
  85. var formData = FormData();
  86. filePaths.forEach((f) {
  87. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  88. });
  89. formData.fields.add(MapEntry(paramActivity, activityAction));
  90. try {
  91. await dio
  92. .post("${ConstCommon.baseUrl}/$apiAddAction", data: formData)
  93. .then((value) {
  94. onSuccess(value.data);
  95. }).catchError((onError) {
  96. onError(AppException.handleError(onError));
  97. });
  98. } catch (e) {
  99. onError(AppException.handleError(e));
  100. }
  101. }
  102. Future<void> updateAction(
  103. Function(dynamic) onSuccess, Function(String) onError,
  104. {String apiUpdateAction,
  105. String paramActivity,
  106. String activityAction,
  107. List<String> filePaths}) async {
  108. var formData = FormData();
  109. filePaths.forEach((f) {
  110. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  111. });
  112. formData.fields.add(MapEntry(paramActivity, activityAction));
  113. try {
  114. await dio
  115. .post("${ConstCommon.baseUrl}/$apiUpdateAction", data: formData)
  116. .then((value) {
  117. onSuccess(value.data);
  118. }).catchError((onError) {
  119. onError(AppException.handleError(onError));
  120. });
  121. } catch (e) {
  122. onError(AppException.handleError(e));
  123. }
  124. }
  125. //Device
  126. Future<List<Device>> getDevices() {
  127. final client = RestClient(dio);
  128. return client.getDevices();
  129. }
  130. }