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.

158 lines
5.2KB

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