diff --git a/lib/pages/map_page.dart b/lib/pages/map_page.dart index e48660f..5a779c7 100644 --- a/lib/pages/map_page.dart +++ b/lib/pages/map_page.dart @@ -20,22 +20,36 @@ class MapPage extends StatefulWidget { } class _MapPageState extends State { - final mapController = MapController(); + final _mapController = MapController(); late FloodStationProvider _floodStationProvider; + bool _loading = false; @override Widget build(BuildContext context) { _floodStationProvider = context.watch(); - if (_floodStationProvider.allStations.isEmpty) { + if (_loading == true) { + return Center( + child: CircularProgressIndicator(), + ); + } else if (_floodStationProvider.allStations.isEmpty) { return Center( child: ElevatedButton( - onPressed: _floodStationProvider.loadAllStations, + onPressed: () { + setState(() { + _loading = true; + }); + _floodStationProvider + .loadAllStations() + .whenComplete(() => setState(() { + _loading = false; + })); + }, child: Text('Load Map'), ), ); } return FlutterMap( - mapController: mapController, + mapController: _mapController, options: MapOptions( cameraConstraint: CameraConstraint.containCenter( bounds: LatLngBounds.fromPoints(_floodStationProvider.allStations @@ -56,13 +70,14 @@ class _MapPageState extends State { padding: EdgeInsets.all(50), maxZoom: 15, markers: _stationsAsMarkers(_floodStationProvider.allStations), - builder: _markerBuilder), + builder: _clusterMarkerBuilder), ) ], ); } - Widget _markerBuilder(BuildContext context, List markers) { + // builds the clustered marker + Widget _clusterMarkerBuilder(BuildContext context, List markers) { return Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(20), @@ -71,7 +86,7 @@ class _MapPageState extends State { child: Center( child: Text( markers.length.toString(), - style: const TextStyle(color: Colors.white), + style: TextStyle(color: Theme.of(context).colorScheme.onTertiary), ), ), ); @@ -92,7 +107,7 @@ class _MapPageState extends State { .toList(); } - _markerTapped(FloodStation station) { + void _markerTapped(FloodStation station) { showDialog( context: context, builder: (context) => MapPopup(