From e4effdcbd64bec88be0192934874b747ff19bd3c Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Tue, 13 Oct 2026 11:19:26 +0300 Subject: [PATCH] show bottom sheet when tap on marker. --- .../asset_tracking/map_tracking_page.dart | 51 +++++++++++++------ 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/lib/modules/asset_tracking/map_tracking_page.dart b/lib/modules/asset_tracking/map_tracking_page.dart index 54dfd127..c8fd621f 100644 --- a/lib/modules/asset_tracking/map_tracking_page.dart +++ b/lib/modules/asset_tracking/map_tracking_page.dart @@ -18,6 +18,7 @@ import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/new_views/common_widgets/multiple_item_drop_down_menu.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; +import 'package:test_sa/views/widgets/item_views/info_header_widget.dart'; import 'package:test_sa/views/widgets/item_views/info_text_widget.dart'; import 'asset_tracking_item_view.dart'; @@ -190,17 +191,7 @@ class _MapTrackingPageState extends State { setState(() { _geojson = decoded; _computedBounds = bounds; - markers = [ - if (hasAssetPosition) - Marker( - point: LatLng(assetLocation!.latitude!, assetLocation.longitude!), - child: Tooltip( - triggerMode: TooltipTriggerMode.tap, - message: "${widget.assetTrackingData?.label ?? ''}\nLast seen: ${widget.assetTrackingData?.location?.lastSeen?.toServiceRequestDetailsFormat}", - child: const Icon(Icons.location_pin, color: AppColor.red30), - ), - ), - ]; + markers = [if (hasAssetPosition) _buildAssetMarker(widget.assetTrackingData!)]; }); WidgetsBinding.instance.addPostFrameCallback((_) { @@ -370,11 +361,9 @@ class _MapTrackingPageState extends State { Marker _buildAssetMarker(AssetTrackingModel asset) { return Marker( point: LatLng(asset.location!.latitude!, asset.location!.longitude!), - child: Tooltip( - triggerMode: TooltipTriggerMode.tap, - message: "${asset.label ?? ''}\nLast seen: ${asset.location?.lastSeen?.toServiceRequestDetailsFormat}", - child: const Icon(Icons.location_pin, color: AppColor.red30), - ), + child: const Icon(Icons.location_pin, color: AppColor.red30).onPress(() { + _showAssetDetails(asset); + }), ); } @@ -420,6 +409,36 @@ class _MapTrackingPageState extends State { }); } + void _showAssetDetails(AssetTrackingModel asset) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (sheetContext) { + return Container( + constraints: BoxConstraints(maxHeight: MediaQuery.of(sheetContext).size.height * 0.6), + decoration: BoxDecoration( + color: AppColor.background(sheetContext), + borderRadius: const BorderRadius.vertical(top: Radius.circular(20)), + ), + child: Padding( + padding: const EdgeInsets.all(16), + child: SafeArea( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + spacing: 8, + children: [ + Text("Asset Information", style: AppTextStyles.heading5.copyWith(color: AppColor.textColor(sheetContext))), + AssetTrackingListItemView(asset, false, showViewOnMap: false), + ], + ), + )), + ); + }, + ); + } + double _dragPosition = 0.5; late double _sheetPosition = _dragPosition; final minChildSize = 0.25;