import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'models/asset_tracking_model.dart'; import 'models/floor_map_model.dart'; import 'models/penguin_site_model.dart'; class AssetTrackingProvider extends ChangeNotifier { bool isLoading = false; bool isNextPageLoading = false; final pageItemNumber = 12; int pageNo = 1; List assetsList = []; List assetsOnTheFloorList = []; List sitesList = []; PenguinSiteModel? selectedSite; List buildList = []; PenguinSiteModel? selectedBuilding; List floorList = []; PenguinSiteModel? selectedFloor; String get getExpansionHeader => (selectedBuilding == null || selectedBuilding == null || selectedFloor == null) ? "Search Floor Map" : "${selectedSite!.label} > ${selectedBuilding!.label} > ${selectedFloor!.label}"; reset() { isLoading = false; selectedFloor = null; selectedBuilding = null; selectedSite = null; assetsList = []; assetsOnTheFloorList = []; notify(); } notify() { notifyListeners(); } Future getAssetsFromPenguin({bool loadMore = false}) async { if (isLoading || isNextPageLoading) return -2; if (loadMore) { isNextPageLoading = true; pageNo += 1; } else { isLoading = true; pageNo = 1; // reset pagination } notifyListeners(); try { final payload = {"pageSize": pageItemNumber, "pageNumber": pageNo}; final response = await ApiManager.instance.post(URLs.getAssetsFromPenguin, body: payload); if (response.statusCode >= 200 && response.statusCode < 300) { final Map jsonData = json.decode(response.body); List list = jsonData["data"]; assetsList.addAll(list.map((item) => AssetTrackingModel.fromJson(item)).toList()); if (jsonData["totalRows"] <= assetsList.length) { // nextPage = true; } // if (loadMore) { // assetInventoryResponse?.assetList?.addAll(newResponse.assetList ?? []); // assetInventoryResponse?.totalRows = newResponse.totalRows; // } else { // assetInventoryResponse = newResponse; // } // nextPage = (assetInventoryResponse?.assetList?.length ?? 0) < (assetInventoryResponse?.totalRows ?? 0); } else { // nextPage = false; } isLoading = false; isNextPageLoading = false; notifyListeners(); return response.statusCode; } catch (error) { isLoading = false; isNextPageLoading = false; // stateCode = -1; // nextPage = false; notifyListeners(); return -1; } } Future getAssetsFromPenguinByFloor() async { try { assetsOnTheFloorList.clear(); final response = await ApiManager.instance.post(URLs.getAssetsFromPenguin, body: { "campusId": selectedSite!.id, "venueIds": [selectedBuilding!.id], "floorIds": [selectedFloor!.id] }); if (response.statusCode >= 200 && response.statusCode < 300) { final Map jsonData = json.decode(response.body); List list = jsonData["data"]; assetsOnTheFloorList.addAll(list.map((item) => AssetTrackingModel.fromJson(item)).toList()); } notifyListeners(); } catch (error) { notifyListeners(); } } Future getFloorMap(int floorId) async { FloorMapModel? floorMapModel; try { final response = await ApiManager.instance.get(URLs.getPenguinFloors + "/$floorId/maps"); if (response.statusCode >= 200 && response.statusCode < 300) { floorMapModel = FloorMapModel.fromJson(json.decode(response.body)["data"]); final geoJsonResponse = await ApiManager.instance.get(floorMapModel.geojsonUrl!); floorMapModel.geojsonData = json.decode(geoJsonResponse.body); } return floorMapModel; } catch (error) { return floorMapModel; } } Future getPenguinSites() async { try { sitesList.clear(); buildList.clear(); floorList.clear(); selectedSite = null; selectedBuilding = null; selectedFloor = null; final response = await ApiManager.instance.get(URLs.getPenguinSites); if (response.statusCode >= 200 && response.statusCode < 300) { final Map jsonData = json.decode(response.body); List list = jsonData["data"]; sitesList.addAll(list.map((item) => PenguinSiteModel.fromJson(item)).toList()); } notifyListeners(); } catch (error) { notifyListeners(); } } Future> getPenguinDepartments(int id) async { List sitesList = []; try { final response = await ApiManager.instance.get(URLs.getPenguinDepartments + "?siteId=$id"); if (response.statusCode >= 200 && response.statusCode < 300) { final Map jsonData = json.decode(response.body); List list = jsonData["data"]; sitesList.addAll(list.map((item) => PenguinSiteModel.fromJson(item)).toList()); } return sitesList; } catch (error) { return sitesList; } } Future getPenguinBuildings(int id) async { try { buildList.clear(); floorList.clear(); selectedBuilding = null; selectedFloor = null; final response = await ApiManager.instance.get(URLs.getPenguinBuildings + "?siteId=$id"); if (response.statusCode >= 200 && response.statusCode < 300) { final Map jsonData = json.decode(response.body); List list = jsonData["data"]; buildList.addAll(list.map((item) => PenguinSiteModel.fromJson(item)).toList()); } notifyListeners(); } catch (error) { notifyListeners(); } } Future getPenguinFloors(int id) async { try { floorList.clear(); selectedFloor = null; final response = await ApiManager.instance.get(URLs.getPenguinFloors + "?buildingId=$id"); if (response.statusCode >= 200 && response.statusCode < 300) { final Map jsonData = json.decode(response.body); List list = jsonData["data"]; floorList.addAll(list.map((item) => PenguinSiteModel.fromJson(item)).toList()); } notifyListeners(); } catch (error) { notifyListeners(); } } }