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.

138 lines
4.3KB

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