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.

156 lines
5.1KB

  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. return client.getSupplies(query: query);
  71. }
  72. Object getInstanceClass() {
  73. var instanceClass;
  74. if (1 == 1) {
  75. instanceClass = new Crop();
  76. }
  77. return instanceClass;
  78. }
  79. //Action
  80. Future<void> createAction(
  81. Function(dynamic) onSuccess, Function(String) onError,
  82. {String apiAddAction,
  83. String paramActivity,
  84. String activityAction,
  85. List<String> filePaths}) async {
  86. var formData = FormData();
  87. filePaths.forEach((f) {
  88. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  89. });
  90. formData.fields.add(MapEntry(paramActivity, activityAction));
  91. try {
  92. await dio
  93. .post("${ConstCommon.baseUrl}/$apiAddAction", data: formData)
  94. .then((value) {
  95. onSuccess(value.data);
  96. }).catchError((onError) {
  97. onError(AppException.handleError(onError));
  98. });
  99. } catch (e) {
  100. onError(AppException.handleError(e));
  101. }
  102. }
  103. Future<void> updateAction(
  104. Function(dynamic) onSuccess, Function(String) onError,
  105. {String apiUpdateAction,
  106. String paramActivity,
  107. String activityAction,
  108. List<String> filePaths}) async {
  109. var formData = FormData();
  110. filePaths.forEach((f) {
  111. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  112. });
  113. formData.fields.add(MapEntry(paramActivity, activityAction));
  114. try {
  115. await dio
  116. .post("${ConstCommon.baseUrl}/$apiUpdateAction", data: formData)
  117. .then((value) {
  118. onSuccess(value.data);
  119. }).catchError((onError) {
  120. onError(AppException.handleError(onError));
  121. });
  122. } catch (e) {
  123. onError(AppException.handleError(e));
  124. }
  125. }
  126. //Device
  127. Future<List<Device>> getDevices() {
  128. final client = RestClient(dio);
  129. return client.getDevices();
  130. }
  131. //Environment Parameter
  132. Future<List<EnvironmentParameter>> getEnvironmentParameters(
  133. {@required int cropId, int page, int size}) {
  134. final client = RestClient(dio);
  135. return client.getEnvironmentParameters(cropId, page: page, size: size);
  136. }
  137. }