[google_maps_flutter] Switch to using new structured options interface methods (#5825)
diff --git a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md
index d09aa4d..2bf5b17 100644
--- a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md
+++ b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md
@@ -1,5 +1,7 @@
-## NEXT
+## 2.1.8
+* Switches to new platform interface versions of `buildView` and
+ `updateOptions`.
* Ignores unnecessary import warnings in preparation for [upcoming Flutter changes](https://github.com/flutter/flutter/pull/104231).
## 2.1.7
diff --git a/packages/google_maps_flutter/google_maps_flutter/lib/src/controller.dart b/packages/google_maps_flutter/google_maps_flutter/lib/src/controller.dart
index dfc6e57..71b1434 100644
--- a/packages/google_maps_flutter/google_maps_flutter/lib/src/controller.dart
+++ b/packages/google_maps_flutter/google_maps_flutter/lib/src/controller.dart
@@ -102,10 +102,9 @@
/// platform side.
///
/// The returned [Future] completes after listeners have been notified.
- Future<void> _updateMapOptions(Map<String, dynamic> optionsUpdate) {
- assert(optionsUpdate != null);
+ Future<void> _updateMapConfiguration(MapConfiguration update) {
return GoogleMapsFlutterPlatform.instance
- .updateMapOptions(optionsUpdate, mapId: mapId);
+ .updateMapConfiguration(update, mapId: mapId);
}
/// Updates marker configuration.
diff --git a/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart b/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart
index 8ecbfbb..b76d103 100644
--- a/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart
+++ b/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart
@@ -294,30 +294,34 @@
Map<PolygonId, Polygon> _polygons = <PolygonId, Polygon>{};
Map<PolylineId, Polyline> _polylines = <PolylineId, Polyline>{};
Map<CircleId, Circle> _circles = <CircleId, Circle>{};
- late _GoogleMapOptions _googleMapOptions;
+ late MapConfiguration _mapConfiguration;
@override
Widget build(BuildContext context) {
- return GoogleMapsFlutterPlatform.instance.buildViewWithTextDirection(
+ return GoogleMapsFlutterPlatform.instance.buildViewWithConfiguration(
_mapId,
onPlatformViewCreated,
- textDirection: widget.layoutDirection ??
- Directionality.maybeOf(context) ??
- TextDirection.ltr,
- initialCameraPosition: widget.initialCameraPosition,
- markers: widget.markers,
- polygons: widget.polygons,
- polylines: widget.polylines,
- circles: widget.circles,
- gestureRecognizers: widget.gestureRecognizers,
- mapOptions: _googleMapOptions.toMap(),
+ widgetConfiguration: MapWidgetConfiguration(
+ textDirection: widget.layoutDirection ??
+ Directionality.maybeOf(context) ??
+ TextDirection.ltr,
+ initialCameraPosition: widget.initialCameraPosition,
+ gestureRecognizers: widget.gestureRecognizers,
+ ),
+ mapObjects: MapObjects(
+ markers: widget.markers,
+ polygons: widget.polygons,
+ polylines: widget.polylines,
+ circles: widget.circles,
+ ),
+ mapConfiguration: _mapConfiguration,
);
}
@override
void initState() {
super.initState();
- _googleMapOptions = _GoogleMapOptions.fromWidget(widget);
+ _mapConfiguration = _configurationFromMapWidget(widget);
_markers = keyByMarkerId(widget.markers);
_polygons = keyByPolygonId(widget.polygons);
_polylines = keyByPolylineId(widget.polylines);
@@ -347,16 +351,15 @@
}
Future<void> _updateOptions() async {
- final _GoogleMapOptions newOptions = _GoogleMapOptions.fromWidget(widget);
- final Map<String, dynamic> updates =
- _googleMapOptions.updatesMap(newOptions);
+ final MapConfiguration newConfig = _configurationFromMapWidget(widget);
+ final MapConfiguration updates = newConfig.diffFrom(_mapConfiguration);
if (updates.isEmpty) {
return;
}
final GoogleMapController controller = await _controller.future;
// ignore: unawaited_futures
- controller._updateMapOptions(updates);
- _googleMapOptions = newOptions;
+ controller._updateMapConfiguration(updates);
+ _mapConfiguration = newConfig;
}
Future<void> _updateMarkers() async {
@@ -524,98 +527,27 @@
}
}
-/// Configuration options for the GoogleMaps user interface.
-class _GoogleMapOptions {
- _GoogleMapOptions.fromWidget(GoogleMap map)
- : compassEnabled = map.compassEnabled,
- mapToolbarEnabled = map.mapToolbarEnabled,
- cameraTargetBounds = map.cameraTargetBounds,
- mapType = map.mapType,
- minMaxZoomPreference = map.minMaxZoomPreference,
- rotateGesturesEnabled = map.rotateGesturesEnabled,
- scrollGesturesEnabled = map.scrollGesturesEnabled,
- tiltGesturesEnabled = map.tiltGesturesEnabled,
- trackCameraPosition = map.onCameraMove != null,
- zoomControlsEnabled = map.zoomControlsEnabled,
- zoomGesturesEnabled = map.zoomGesturesEnabled,
- liteModeEnabled = map.liteModeEnabled,
- myLocationEnabled = map.myLocationEnabled,
- myLocationButtonEnabled = map.myLocationButtonEnabled,
- padding = map.padding,
- indoorViewEnabled = map.indoorViewEnabled,
- trafficEnabled = map.trafficEnabled,
- buildingsEnabled = map.buildingsEnabled,
- assert(!map.liteModeEnabled || Platform.isAndroid);
-
- final bool compassEnabled;
-
- final bool mapToolbarEnabled;
-
- final CameraTargetBounds cameraTargetBounds;
-
- final MapType mapType;
-
- final MinMaxZoomPreference minMaxZoomPreference;
-
- final bool rotateGesturesEnabled;
-
- final bool scrollGesturesEnabled;
-
- final bool tiltGesturesEnabled;
-
- final bool trackCameraPosition;
-
- final bool zoomControlsEnabled;
-
- final bool zoomGesturesEnabled;
-
- final bool liteModeEnabled;
-
- final bool myLocationEnabled;
-
- final bool myLocationButtonEnabled;
-
- final EdgeInsets padding;
-
- final bool indoorViewEnabled;
-
- final bool trafficEnabled;
-
- final bool buildingsEnabled;
-
- Map<String, dynamic> toMap() {
- return <String, dynamic>{
- 'compassEnabled': compassEnabled,
- 'mapToolbarEnabled': mapToolbarEnabled,
- 'cameraTargetBounds': cameraTargetBounds.toJson(),
- 'mapType': mapType.index,
- 'minMaxZoomPreference': minMaxZoomPreference.toJson(),
- 'rotateGesturesEnabled': rotateGesturesEnabled,
- 'scrollGesturesEnabled': scrollGesturesEnabled,
- 'tiltGesturesEnabled': tiltGesturesEnabled,
- 'zoomControlsEnabled': zoomControlsEnabled,
- 'zoomGesturesEnabled': zoomGesturesEnabled,
- 'liteModeEnabled': liteModeEnabled,
- 'trackCameraPosition': trackCameraPosition,
- 'myLocationEnabled': myLocationEnabled,
- 'myLocationButtonEnabled': myLocationButtonEnabled,
- 'padding': <double>[
- padding.top,
- padding.left,
- padding.bottom,
- padding.right,
- ],
- 'indoorEnabled': indoorViewEnabled,
- 'trafficEnabled': trafficEnabled,
- 'buildingsEnabled': buildingsEnabled,
- };
- }
-
- Map<String, dynamic> updatesMap(_GoogleMapOptions newOptions) {
- final Map<String, dynamic> prevOptionsMap = toMap();
-
- return newOptions.toMap()
- ..removeWhere(
- (String key, dynamic value) => prevOptionsMap[key] == value);
- }
+/// Builds a [MapConfiguration] from the given [map].
+MapConfiguration _configurationFromMapWidget(GoogleMap map) {
+ assert(!map.liteModeEnabled || Platform.isAndroid);
+ return MapConfiguration(
+ compassEnabled: map.compassEnabled,
+ mapToolbarEnabled: map.mapToolbarEnabled,
+ cameraTargetBounds: map.cameraTargetBounds,
+ mapType: map.mapType,
+ minMaxZoomPreference: map.minMaxZoomPreference,
+ rotateGesturesEnabled: map.rotateGesturesEnabled,
+ scrollGesturesEnabled: map.scrollGesturesEnabled,
+ tiltGesturesEnabled: map.tiltGesturesEnabled,
+ trackCameraPosition: map.onCameraMove != null,
+ zoomControlsEnabled: map.zoomControlsEnabled,
+ zoomGesturesEnabled: map.zoomGesturesEnabled,
+ liteModeEnabled: map.liteModeEnabled,
+ myLocationEnabled: map.myLocationEnabled,
+ myLocationButtonEnabled: map.myLocationButtonEnabled,
+ padding: map.padding,
+ indoorViewEnabled: map.indoorViewEnabled,
+ trafficEnabled: map.trafficEnabled,
+ buildingsEnabled: map.buildingsEnabled,
+ );
}
diff --git a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml
index 215a930..1a0dd4e 100644
--- a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml
+++ b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml
@@ -2,7 +2,7 @@
description: A Flutter plugin for integrating Google Maps in iOS and Android applications.
repository: https://github.com/flutter/plugins/tree/main/packages/google_maps_flutter/google_maps_flutter
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22
-version: 2.1.7
+version: 2.1.8
environment:
sdk: ">=2.14.0 <3.0.0"
@@ -21,7 +21,7 @@
flutter:
sdk: flutter
flutter_plugin_android_lifecycle: ^2.0.1
- google_maps_flutter_platform_interface: ^2.1.2
+ google_maps_flutter_platform_interface: ^2.2.0
dev_dependencies:
flutter_test:
diff --git a/packages/google_maps_flutter/google_maps_flutter/test/map_creation_test.dart b/packages/google_maps_flutter/google_maps_flutter/test/map_creation_test.dart
index 2b03d78..b34fccb 100644
--- a/packages/google_maps_flutter/google_maps_flutter/test/map_creation_test.dart
+++ b/packages/google_maps_flutter/google_maps_flutter/test/map_creation_test.dart
@@ -7,8 +7,6 @@
// ignore: unnecessary_import
import 'dart:typed_data';
-import 'package:flutter/foundation.dart';
-import 'package:flutter/gestures.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -90,8 +88,8 @@
Future<void> init(int mapId) async {}
@override
- Future<void> updateMapOptions(
- Map<String, dynamic> optionsUpdate, {
+ Future<void> updateMapConfiguration(
+ MapConfiguration update, {
required int mapId,
}) async {}
@@ -278,18 +276,12 @@
}
@override
- Widget buildView(
+ Widget buildViewWithConfiguration(
int creationId,
PlatformViewCreatedCallback onPlatformViewCreated, {
- required CameraPosition initialCameraPosition,
- Set<Marker> markers = const <Marker>{},
- Set<Polygon> polygons = const <Polygon>{},
- Set<Polyline> polylines = const <Polyline>{},
- Set<Circle> circles = const <Circle>{},
- Set<TileOverlay> tileOverlays = const <TileOverlay>{},
- Set<Factory<OneSequenceGestureRecognizer>>? gestureRecognizers =
- const <Factory<OneSequenceGestureRecognizer>>{},
- Map<String, dynamic> mapOptions = const <String, dynamic>{},
+ required MapWidgetConfiguration widgetConfiguration,
+ MapObjects mapObjects = const MapObjects(),
+ MapConfiguration mapConfiguration = const MapConfiguration(),
}) {
onPlatformViewCreated(0);
createdIds.add(creationId);