diff --git a/lib/modules/asset_tracking/asset_tracking_provider.dart b/lib/modules/asset_tracking/asset_tracking_provider.dart index 089dcb8e..25777c1d 100644 --- a/lib/modules/asset_tracking/asset_tracking_provider.dart +++ b/lib/modules/asset_tracking/asset_tracking_provider.dart @@ -67,7 +67,7 @@ class AssetTrackingProvider extends ChangeNotifier { notifyListeners(); } - Future getAssetsFromPenguin({bool loadMore = false,AssetTrackingSearchModel? searchModel}) async { + Future getAssetsFromPenguin({bool loadMore = false, AssetTrackingSearchModel? searchModel}) async { if (isLoading || isNextPageLoading) return -2; if (loadMore) { isNextPageLoading = true; @@ -90,14 +90,14 @@ class AssetTrackingProvider extends ChangeNotifier { if (response.statusCode >= 200 && response.statusCode < 300) { final Map jsonData = json.decode(response.body); List list = jsonData["data"] ?? []; - List responseAssetList = list.map((item) => AssetTrackingModel.fromJson(item)).toList(); + List responseAssetList = list.map((item) => AssetTrackingModel.fromJson(item)).toList(); if (loadMore) { assetsList.addAll(responseAssetList); } else { assetsList = responseAssetList; } - final int totalRows = (jsonData["totalRows"] as int?) ?? assetsList.length; + final int totalRows = (jsonData["totalRows"] as int?) ?? assetsList.length; nextPage = (assetsList.length) < totalRows; } else { if (loadMore) pageNo -= 1; @@ -136,6 +136,7 @@ class AssetTrackingProvider extends ChangeNotifier { Future getZoneFromPenguin() async { if (zonesList.isNotEmpty) { await Future.delayed(const Duration(milliseconds: 250)); + calculateCoordinates(); return; } try { @@ -144,7 +145,8 @@ class AssetTrackingProvider extends ChangeNotifier { final Map jsonData = json.decode(response.body); List list = jsonData["data"]; zonesList.addAll(list.map((item) => ZoneModel.fromJson(item)).toList()); - notify(); + calculateCoordinates(); + // notify(); } } catch (error) { print("getZoneFromPenguin:Error:$error"); diff --git a/lib/modules/asset_tracking/map_tracking_page.dart b/lib/modules/asset_tracking/map_tracking_page.dart index bd1987a6..c6c7db1c 100644 --- a/lib/modules/asset_tracking/map_tracking_page.dart +++ b/lib/modules/asset_tracking/map_tracking_page.dart @@ -216,70 +216,6 @@ class _MapTrackingPageState extends State { // if (!inAppView || ) if (markers.isNotEmpty) MarkerLayer(markers: markers), - if (inAppView) - Positioned( - bottom: 0, - left: 0, - right: 0, - child: Selector>( - selector: (_, myModel) => myModel.assetsOnTheFloorList, - builder: (_, assetsOnTheFloorList, __) { - return assetsOnTheFloorList.isEmpty - ? const SizedBox() - : Container( - margin: const EdgeInsets.all(16), - padding: const EdgeInsets.only(right: 0, left: 0), - decoration: BoxDecoration( - color: AppColor.tabBarBackground(context), - border: Border.all(color: AppColor.tabBarBorder(context)), - borderRadius: BorderRadius.circular(20), - ), - child: UpwardExpansionTile(title: InfoTextLabelWidget(label: "${assetsOnTheFloorList.length} Assets found on this floor"), children: [ - LimitedBox( - maxHeight: 120, - child: MultipleItemDropDownMenu( - context: context, - title: 'Assets on The Floor', - hintMsg: 'Search By Label or Serial Number', - initialValue: [], - showShadow: false, - staticData: assetsOnTheFloorList, - showCancel: true, - showAsFullScreenDialog: true, - onSelect: (selectedAssets) { - setState(() { - markers = [ - for (var asset in selectedAssets!) - Marker( - point: LatLng(asset.location!.latitude!, asset.location!.longitude!), - child: Tooltip( - triggerMode: TooltipTriggerMode.tap, - message: "Last seen: ${asset.location?.lastSeen?.toServiceRequestDetailsFormat}", - child: const Icon(Icons.location_pin, color: AppColor.red30), - ), - ), - ]; - }); - // markers - }, - ).paddingOnly(start: 16, end: 16, top: 16), - ), - ]), - ); - - // Column( - // mainAxisSize: MainAxisSize.min, - // children: [ - // Container( - // width: 50.toScreenWidth, - // height: 6.toScreenHeight, - // decoration: BoxDecoration(color: AppColor.white50, borderRadius: BorderRadius.circular(30)), - // ).center, - // InfoTextLabelWidget(label: "There is ${assetsOnTheFloorList.length} assets on this floor"), - // ], - // ).bottomSheetContainer(context, padding: const EdgeInsets.all(16)); - }), - ), ], if (inAppView) Selector>( @@ -300,8 +236,72 @@ class _MapTrackingPageState extends State { borderStrokeWidth: 2.0, ), ]; - return PolygonLayer(polygons: zonesPolygons); + return PolygonLayer(polygons: zonesPolygons, hitNotifier: _polygonHitNotifier); }), + if (_geojson != null && inAppView) + Positioned( + bottom: 0, + left: 0, + right: 0, + child: Selector>( + selector: (_, myModel) => myModel.assetsOnTheFloorList, + builder: (_, assetsOnTheFloorList, __) { + return assetsOnTheFloorList.isEmpty + ? const SizedBox() + : Container( + margin: const EdgeInsets.all(16), + padding: const EdgeInsets.only(right: 0, left: 0), + decoration: BoxDecoration( + color: AppColor.tabBarBackground(context), + border: Border.all(color: AppColor.tabBarBorder(context)), + borderRadius: BorderRadius.circular(20), + ), + child: UpwardExpansionTile(title: InfoTextLabelWidget(label: "${assetsOnTheFloorList.length} Assets found on this floor"), children: [ + LimitedBox( + maxHeight: 120, + child: MultipleItemDropDownMenu( + context: context, + title: 'Assets on The Floor', + hintMsg: 'Search By Label or Serial Number', + initialValue: [], + showShadow: false, + staticData: assetsOnTheFloorList, + showCancel: true, + showAsFullScreenDialog: true, + onSelect: (selectedAssets) { + setState(() { + markers = [ + for (var asset in selectedAssets!) + Marker( + point: LatLng(asset.location!.latitude!, asset.location!.longitude!), + child: Tooltip( + triggerMode: TooltipTriggerMode.tap, + message: "Last seen: ${asset.location?.lastSeen?.toServiceRequestDetailsFormat}", + child: const Icon(Icons.location_pin, color: AppColor.red30), + ), + ), + ]; + }); + // markers + }, + ).paddingOnly(start: 16, end: 16, top: 16), + ), + ]), + ); + + // Column( + // mainAxisSize: MainAxisSize.min, + // children: [ + // Container( + // width: 50.toScreenWidth, + // height: 6.toScreenHeight, + // decoration: BoxDecoration(color: AppColor.white50, borderRadius: BorderRadius.circular(30)), + // ).center, + // InfoTextLabelWidget(label: "There is ${assetsOnTheFloorList.length} assets on this floor"), + // ], + // ).bottomSheetContainer(context, padding: const EdgeInsets.all(16)); + }), + ), Positioned( top: 70, right: 8, @@ -430,7 +430,9 @@ class _MapTrackingPageState extends State { assetTrackingProvider.notify(); assetTrackingProvider.getAssetsFromPenguinByFloor(); - if (assetProvider.selectedFloor != null) { + if (assetProvider.selectedFloor == null) { + assetTrackingProvider.getZoneFromPenguin(); + } else if (assetProvider.selectedFloor != null) { getFloorMap(assetProvider.selectedFloor!.id!); assetTrackingProvider.getZoneFromPenguin(); } else {