import 'dart:convert'; import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; import 'package:test_sa/models/issue.dart'; import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/service_request/service_request_search.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/user.dart'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart'; class GasRefillProvider extends ChangeNotifier{ // number of items call in each request final pageItemNumber = 50; //reset provider data void reset(){ items = null; nextPage = true; stateCode = null; } // state code of current request to defied error message // like 400 customer request failed // 500 service not available int stateCode; // true if there is next page in product list and false if not bool nextPage = true; // list of user requests List items; // when requests in-process _loading = true // done _loading = true // failed _loading = false bool isLoading; /// return -2 if request in progress /// return -1 if error happen when sending request /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart Future getRequests ({ @required String host, @required User user, }) async { if(isLoading == true) return -2; isLoading = true; Response response; Map body = {}; body["pageNumber"] = (items?.length ?? 0) ~/pageItemNumber + 1; body["pageSize"] = pageItemNumber; response = await ApiManager.instance.post( URLs.getGasRefill, body: body, ); stateCode = response.statusCode; if(stateCode >= 200 && stateCode < 300) { // client's request was successfully received List requestsListJson = json.decode(response.body)["data"]; List itemsPage = requestsListJson.map( (request) => GasRefillModel.fromJson(request)).toList(); items ??= []; items.addAll(itemsPage); if(itemsPage.length == pageItemNumber){ nextPage = true; }else{ nextPage = false; } } try{ isLoading = false; notifyListeners(); return response.statusCode; } catch(error) { print(error); isLoading = false; stateCode = -1; notifyListeners(); return -1; } } Future createModel ({ @required String host, @required User user, @required GasRefillModel model, }) async { Map body = { "uid": user.id.toString(), "token": user.token ?? "", "GazRefillNo": "GR-${DateTime.now().toString().split(" ").first}", "status": model.status.toMap(), }; body["gazRefillDetails"] = model.details.map((model) => { "gasType": model.type.toMap(), "cylinderSize": model.cylinderSize.toMap(), "cylinderType": model.cylinderType.toMap(), "requestedQty": model.requestedQuantity, }).toList(); Response response; try{ response = await ApiManager.instance.post( URLs.requestGasRefill, body: body ); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { if(items != null) { reset(); notifyListeners(); } } return response.statusCode; } catch(error) { print(error); return -1; } } Future updateModel ({ @required String host, @required User user, @required GasRefillModel oldModel, @required GasRefillModel newModel, }) async { Map body = { "id":newModel.id, "gazRefillNo": newModel.title ?? "", "status": newModel.status.toMap(), }; body["gazRefillDetails"] = newModel.details.map((model) => { "gasType": model.type.toMap(), "cylinderSize": model.cylinderSize.toMap(), "cylinderType": model.cylinderType.toMap(), "requestedQty": model.requestedQuantity, "deliverdQty": model.deliveredQuantity, }).toList(); Response response; try{ response = await ApiManager.instance.put( URLs.updateGasRefill, body: body ); // response = await post( // Uri.parse("$host${URLs.updateGasRefill}/${newModel.id}"), // body: body, // ); stateCode = response.statusCode; if(response.statusCode >= 200 && response.statusCode < 300) { oldModel.fromGasRefillModel(newModel); notifyListeners(); } return response.statusCode; } catch(error) { return -1; } } }