@@ -304,7 +304,7 @@ class _GoogleMapState extends State<GoogleMap> {
304304
305305 @override
306306 Widget build (BuildContext context) {
307- return GoogleMapsFlutterPlatform .instance.buildViewWithTextDirection (
307+ return GoogleMapsFlutterPlatform .instance.buildViewWithConfiguration (
308308 _mapId,
309309 onPlatformViewCreated,
310310 textDirection: widget.layoutDirection ??
@@ -324,7 +324,7 @@ class _GoogleMapState extends State<GoogleMap> {
324324 @override
325325 void initState () {
326326 super .initState ();
327- _googleMapOptions = _GoogleMapOptions . fromWidget (widget);
327+ _mapConfiguration = _configurationFromMapWidget (widget);
328328 _markers = keyByMarkerId (widget.markers);
329329 _polygons = keyByPolygonId (widget.polygons);
330330 _polylines = keyByPolylineId (widget.polylines);
@@ -356,16 +356,15 @@ class _GoogleMapState extends State<GoogleMap> {
356356 }
357357
358358 Future <void > _updateOptions () async {
359- final _GoogleMapOptions newOptions = _GoogleMapOptions .fromWidget (widget);
360- final Map <String , dynamic > updates =
361- _googleMapOptions.updatesMap (newOptions);
359+ final MapConfiguration newConfig = _configurationFromMapWidget (widget);
360+ final MapConfiguration updates = newConfig.diffFrom (_mapConfiguration);
362361 if (updates.isEmpty) {
363362 return ;
364363 }
365364 final GoogleMapController controller = await _controller.future;
366365 // ignore: unawaited_futures
367- controller._updateMapOptions (updates);
368- _googleMapOptions = newOptions ;
366+ controller._updateMapConfiguration (updates);
367+ _mapConfiguration = newConfig ;
369368 }
370369
371370 Future <void > _updateMarkers () async {
@@ -553,98 +552,27 @@ class _GoogleMapState extends State<GoogleMap> {
553552 }
554553}
555554
556- /// Configuration options for the GoogleMaps user interface.
557- class _GoogleMapOptions {
558- _GoogleMapOptions .fromWidget (GoogleMap map)
559- : compassEnabled = map.compassEnabled,
560- mapToolbarEnabled = map.mapToolbarEnabled,
561- cameraTargetBounds = map.cameraTargetBounds,
562- mapType = map.mapType,
563- minMaxZoomPreference = map.minMaxZoomPreference,
564- rotateGesturesEnabled = map.rotateGesturesEnabled,
565- scrollGesturesEnabled = map.scrollGesturesEnabled,
566- tiltGesturesEnabled = map.tiltGesturesEnabled,
567- trackCameraPosition = map.onCameraMove != null ,
568- zoomControlsEnabled = map.zoomControlsEnabled,
569- zoomGesturesEnabled = map.zoomGesturesEnabled,
570- liteModeEnabled = map.liteModeEnabled,
571- myLocationEnabled = map.myLocationEnabled,
572- myLocationButtonEnabled = map.myLocationButtonEnabled,
573- padding = map.padding,
574- indoorViewEnabled = map.indoorViewEnabled,
575- trafficEnabled = map.trafficEnabled,
576- buildingsEnabled = map.buildingsEnabled,
577- assert (! map.liteModeEnabled || Platform .isAndroid);
578-
579- final bool compassEnabled;
580-
581- final bool mapToolbarEnabled;
582-
583- final CameraTargetBounds cameraTargetBounds;
584-
585- final MapType mapType;
586-
587- final MinMaxZoomPreference minMaxZoomPreference;
588-
589- final bool rotateGesturesEnabled;
590-
591- final bool scrollGesturesEnabled;
592-
593- final bool tiltGesturesEnabled;
594-
595- final bool trackCameraPosition;
596-
597- final bool zoomControlsEnabled;
598-
599- final bool zoomGesturesEnabled;
600-
601- final bool liteModeEnabled;
602-
603- final bool myLocationEnabled;
604-
605- final bool myLocationButtonEnabled;
606-
607- final EdgeInsets padding;
608-
609- final bool indoorViewEnabled;
610-
611- final bool trafficEnabled;
612-
613- final bool buildingsEnabled;
614-
615- Map <String , dynamic > toMap () {
616- return < String , dynamic > {
617- 'compassEnabled' : compassEnabled,
618- 'mapToolbarEnabled' : mapToolbarEnabled,
619- 'cameraTargetBounds' : cameraTargetBounds.toJson (),
620- 'mapType' : mapType.index,
621- 'minMaxZoomPreference' : minMaxZoomPreference.toJson (),
622- 'rotateGesturesEnabled' : rotateGesturesEnabled,
623- 'scrollGesturesEnabled' : scrollGesturesEnabled,
624- 'tiltGesturesEnabled' : tiltGesturesEnabled,
625- 'zoomControlsEnabled' : zoomControlsEnabled,
626- 'zoomGesturesEnabled' : zoomGesturesEnabled,
627- 'liteModeEnabled' : liteModeEnabled,
628- 'trackCameraPosition' : trackCameraPosition,
629- 'myLocationEnabled' : myLocationEnabled,
630- 'myLocationButtonEnabled' : myLocationButtonEnabled,
631- 'padding' : < double > [
632- padding.top,
633- padding.left,
634- padding.bottom,
635- padding.right,
636- ],
637- 'indoorEnabled' : indoorViewEnabled,
638- 'trafficEnabled' : trafficEnabled,
639- 'buildingsEnabled' : buildingsEnabled,
640- };
641- }
642-
643- Map <String , dynamic > updatesMap (_GoogleMapOptions newOptions) {
644- final Map <String , dynamic > prevOptionsMap = toMap ();
645-
646- return newOptions.toMap ()
647- ..removeWhere (
648- (String key, dynamic value) => prevOptionsMap[key] == value);
649- }
555+ /// Builds a [MapConfiguration] from the given [map] .
556+ MapConfiguration _configurationFromMapWidget (GoogleMap map) {
557+ assert (! map.liteModeEnabled || Platform .isAndroid);
558+ return MapConfiguration (
559+ compassEnabled: map.compassEnabled,
560+ mapToolbarEnabled: map.mapToolbarEnabled,
561+ cameraTargetBounds: map.cameraTargetBounds,
562+ mapType: map.mapType,
563+ minMaxZoomPreference: map.minMaxZoomPreference,
564+ rotateGesturesEnabled: map.rotateGesturesEnabled,
565+ scrollGesturesEnabled: map.scrollGesturesEnabled,
566+ tiltGesturesEnabled: map.tiltGesturesEnabled,
567+ trackCameraPosition: map.onCameraMove != null ,
568+ zoomControlsEnabled: map.zoomControlsEnabled,
569+ zoomGesturesEnabled: map.zoomGesturesEnabled,
570+ liteModeEnabled: map.liteModeEnabled,
571+ myLocationEnabled: map.myLocationEnabled,
572+ myLocationButtonEnabled: map.myLocationButtonEnabled,
573+ padding: map.padding,
574+ indoorViewEnabled: map.indoorViewEnabled,
575+ trafficEnabled: map.trafficEnabled,
576+ buildingsEnabled: map.buildingsEnabled,
577+ );
650578}
0 commit comments