Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 4ed55ed

Browse files
authored
[google_maps_flutter] Switch to using new structured options interface methods (#5825)
1 parent 5118506 commit 4ed55ed

File tree

5 files changed

+57
-132
lines changed

5 files changed

+57
-132
lines changed

packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
## NEXT
1+
## 2.1.8
22

3+
* Switches to new platform interface versions of `buildView` and
4+
`updateOptions`.
35
* Ignores unnecessary import warnings in preparation for [upcoming Flutter changes](https://github.com/flutter/flutter/pull/104231).
46

57
## 2.1.7

packages/google_maps_flutter/google_maps_flutter/lib/src/controller.dart

+2-3
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,9 @@ class GoogleMapController {
102102
/// platform side.
103103
///
104104
/// The returned [Future] completes after listeners have been notified.
105-
Future<void> _updateMapOptions(Map<String, dynamic> optionsUpdate) {
106-
assert(optionsUpdate != null);
105+
Future<void> _updateMapConfiguration(MapConfiguration update) {
107106
return GoogleMapsFlutterPlatform.instance
108-
.updateMapOptions(optionsUpdate, mapId: mapId);
107+
.updateMapConfiguration(update, mapId: mapId);
109108
}
110109

111110
/// Updates marker configuration.

packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart

+44-112
Original file line numberDiff line numberDiff line change
@@ -294,30 +294,34 @@ class _GoogleMapState extends State<GoogleMap> {
294294
Map<PolygonId, Polygon> _polygons = <PolygonId, Polygon>{};
295295
Map<PolylineId, Polyline> _polylines = <PolylineId, Polyline>{};
296296
Map<CircleId, Circle> _circles = <CircleId, Circle>{};
297-
late _GoogleMapOptions _googleMapOptions;
297+
late MapConfiguration _mapConfiguration;
298298

299299
@override
300300
Widget build(BuildContext context) {
301-
return GoogleMapsFlutterPlatform.instance.buildViewWithTextDirection(
301+
return GoogleMapsFlutterPlatform.instance.buildViewWithConfiguration(
302302
_mapId,
303303
onPlatformViewCreated,
304-
textDirection: widget.layoutDirection ??
305-
Directionality.maybeOf(context) ??
306-
TextDirection.ltr,
307-
initialCameraPosition: widget.initialCameraPosition,
308-
markers: widget.markers,
309-
polygons: widget.polygons,
310-
polylines: widget.polylines,
311-
circles: widget.circles,
312-
gestureRecognizers: widget.gestureRecognizers,
313-
mapOptions: _googleMapOptions.toMap(),
304+
widgetConfiguration: MapWidgetConfiguration(
305+
textDirection: widget.layoutDirection ??
306+
Directionality.maybeOf(context) ??
307+
TextDirection.ltr,
308+
initialCameraPosition: widget.initialCameraPosition,
309+
gestureRecognizers: widget.gestureRecognizers,
310+
),
311+
mapObjects: MapObjects(
312+
markers: widget.markers,
313+
polygons: widget.polygons,
314+
polylines: widget.polylines,
315+
circles: widget.circles,
316+
),
317+
mapConfiguration: _mapConfiguration,
314318
);
315319
}
316320

317321
@override
318322
void initState() {
319323
super.initState();
320-
_googleMapOptions = _GoogleMapOptions.fromWidget(widget);
324+
_mapConfiguration = _configurationFromMapWidget(widget);
321325
_markers = keyByMarkerId(widget.markers);
322326
_polygons = keyByPolygonId(widget.polygons);
323327
_polylines = keyByPolylineId(widget.polylines);
@@ -347,16 +351,15 @@ class _GoogleMapState extends State<GoogleMap> {
347351
}
348352

349353
Future<void> _updateOptions() async {
350-
final _GoogleMapOptions newOptions = _GoogleMapOptions.fromWidget(widget);
351-
final Map<String, dynamic> updates =
352-
_googleMapOptions.updatesMap(newOptions);
354+
final MapConfiguration newConfig = _configurationFromMapWidget(widget);
355+
final MapConfiguration updates = newConfig.diffFrom(_mapConfiguration);
353356
if (updates.isEmpty) {
354357
return;
355358
}
356359
final GoogleMapController controller = await _controller.future;
357360
// ignore: unawaited_futures
358-
controller._updateMapOptions(updates);
359-
_googleMapOptions = newOptions;
361+
controller._updateMapConfiguration(updates);
362+
_mapConfiguration = newConfig;
360363
}
361364

362365
Future<void> _updateMarkers() async {
@@ -524,98 +527,27 @@ class _GoogleMapState extends State<GoogleMap> {
524527
}
525528
}
526529

527-
/// Configuration options for the GoogleMaps user interface.
528-
class _GoogleMapOptions {
529-
_GoogleMapOptions.fromWidget(GoogleMap map)
530-
: compassEnabled = map.compassEnabled,
531-
mapToolbarEnabled = map.mapToolbarEnabled,
532-
cameraTargetBounds = map.cameraTargetBounds,
533-
mapType = map.mapType,
534-
minMaxZoomPreference = map.minMaxZoomPreference,
535-
rotateGesturesEnabled = map.rotateGesturesEnabled,
536-
scrollGesturesEnabled = map.scrollGesturesEnabled,
537-
tiltGesturesEnabled = map.tiltGesturesEnabled,
538-
trackCameraPosition = map.onCameraMove != null,
539-
zoomControlsEnabled = map.zoomControlsEnabled,
540-
zoomGesturesEnabled = map.zoomGesturesEnabled,
541-
liteModeEnabled = map.liteModeEnabled,
542-
myLocationEnabled = map.myLocationEnabled,
543-
myLocationButtonEnabled = map.myLocationButtonEnabled,
544-
padding = map.padding,
545-
indoorViewEnabled = map.indoorViewEnabled,
546-
trafficEnabled = map.trafficEnabled,
547-
buildingsEnabled = map.buildingsEnabled,
548-
assert(!map.liteModeEnabled || Platform.isAndroid);
549-
550-
final bool compassEnabled;
551-
552-
final bool mapToolbarEnabled;
553-
554-
final CameraTargetBounds cameraTargetBounds;
555-
556-
final MapType mapType;
557-
558-
final MinMaxZoomPreference minMaxZoomPreference;
559-
560-
final bool rotateGesturesEnabled;
561-
562-
final bool scrollGesturesEnabled;
563-
564-
final bool tiltGesturesEnabled;
565-
566-
final bool trackCameraPosition;
567-
568-
final bool zoomControlsEnabled;
569-
570-
final bool zoomGesturesEnabled;
571-
572-
final bool liteModeEnabled;
573-
574-
final bool myLocationEnabled;
575-
576-
final bool myLocationButtonEnabled;
577-
578-
final EdgeInsets padding;
579-
580-
final bool indoorViewEnabled;
581-
582-
final bool trafficEnabled;
583-
584-
final bool buildingsEnabled;
585-
586-
Map<String, dynamic> toMap() {
587-
return <String, dynamic>{
588-
'compassEnabled': compassEnabled,
589-
'mapToolbarEnabled': mapToolbarEnabled,
590-
'cameraTargetBounds': cameraTargetBounds.toJson(),
591-
'mapType': mapType.index,
592-
'minMaxZoomPreference': minMaxZoomPreference.toJson(),
593-
'rotateGesturesEnabled': rotateGesturesEnabled,
594-
'scrollGesturesEnabled': scrollGesturesEnabled,
595-
'tiltGesturesEnabled': tiltGesturesEnabled,
596-
'zoomControlsEnabled': zoomControlsEnabled,
597-
'zoomGesturesEnabled': zoomGesturesEnabled,
598-
'liteModeEnabled': liteModeEnabled,
599-
'trackCameraPosition': trackCameraPosition,
600-
'myLocationEnabled': myLocationEnabled,
601-
'myLocationButtonEnabled': myLocationButtonEnabled,
602-
'padding': <double>[
603-
padding.top,
604-
padding.left,
605-
padding.bottom,
606-
padding.right,
607-
],
608-
'indoorEnabled': indoorViewEnabled,
609-
'trafficEnabled': trafficEnabled,
610-
'buildingsEnabled': buildingsEnabled,
611-
};
612-
}
613-
614-
Map<String, dynamic> updatesMap(_GoogleMapOptions newOptions) {
615-
final Map<String, dynamic> prevOptionsMap = toMap();
616-
617-
return newOptions.toMap()
618-
..removeWhere(
619-
(String key, dynamic value) => prevOptionsMap[key] == value);
620-
}
530+
/// Builds a [MapConfiguration] from the given [map].
531+
MapConfiguration _configurationFromMapWidget(GoogleMap map) {
532+
assert(!map.liteModeEnabled || Platform.isAndroid);
533+
return MapConfiguration(
534+
compassEnabled: map.compassEnabled,
535+
mapToolbarEnabled: map.mapToolbarEnabled,
536+
cameraTargetBounds: map.cameraTargetBounds,
537+
mapType: map.mapType,
538+
minMaxZoomPreference: map.minMaxZoomPreference,
539+
rotateGesturesEnabled: map.rotateGesturesEnabled,
540+
scrollGesturesEnabled: map.scrollGesturesEnabled,
541+
tiltGesturesEnabled: map.tiltGesturesEnabled,
542+
trackCameraPosition: map.onCameraMove != null,
543+
zoomControlsEnabled: map.zoomControlsEnabled,
544+
zoomGesturesEnabled: map.zoomGesturesEnabled,
545+
liteModeEnabled: map.liteModeEnabled,
546+
myLocationEnabled: map.myLocationEnabled,
547+
myLocationButtonEnabled: map.myLocationButtonEnabled,
548+
padding: map.padding,
549+
indoorViewEnabled: map.indoorViewEnabled,
550+
trafficEnabled: map.trafficEnabled,
551+
buildingsEnabled: map.buildingsEnabled,
552+
);
621553
}

packages/google_maps_flutter/google_maps_flutter/pubspec.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: google_maps_flutter
22
description: A Flutter plugin for integrating Google Maps in iOS and Android applications.
33
repository: https://github.com/flutter/plugins/tree/main/packages/google_maps_flutter/google_maps_flutter
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22
5-
version: 2.1.7
5+
version: 2.1.8
66

77
environment:
88
sdk: ">=2.14.0 <3.0.0"
@@ -21,7 +21,7 @@ dependencies:
2121
flutter:
2222
sdk: flutter
2323
flutter_plugin_android_lifecycle: ^2.0.1
24-
google_maps_flutter_platform_interface: ^2.1.2
24+
google_maps_flutter_platform_interface: ^2.2.0
2525

2626
dev_dependencies:
2727
flutter_test:

packages/google_maps_flutter/google_maps_flutter/test/map_creation_test.dart

+6-14
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import 'dart:async';
77
// ignore: unnecessary_import
88
import 'dart:typed_data';
99

10-
import 'package:flutter/foundation.dart';
11-
import 'package:flutter/gestures.dart';
1210
import 'package:flutter/services.dart';
1311
import 'package:flutter/widgets.dart';
1412
import 'package:flutter_test/flutter_test.dart';
@@ -90,8 +88,8 @@ class TestGoogleMapsFlutterPlatform extends GoogleMapsFlutterPlatform {
9088
Future<void> init(int mapId) async {}
9189

9290
@override
93-
Future<void> updateMapOptions(
94-
Map<String, dynamic> optionsUpdate, {
91+
Future<void> updateMapConfiguration(
92+
MapConfiguration update, {
9593
required int mapId,
9694
}) async {}
9795

@@ -278,18 +276,12 @@ class TestGoogleMapsFlutterPlatform extends GoogleMapsFlutterPlatform {
278276
}
279277

280278
@override
281-
Widget buildView(
279+
Widget buildViewWithConfiguration(
282280
int creationId,
283281
PlatformViewCreatedCallback onPlatformViewCreated, {
284-
required CameraPosition initialCameraPosition,
285-
Set<Marker> markers = const <Marker>{},
286-
Set<Polygon> polygons = const <Polygon>{},
287-
Set<Polyline> polylines = const <Polyline>{},
288-
Set<Circle> circles = const <Circle>{},
289-
Set<TileOverlay> tileOverlays = const <TileOverlay>{},
290-
Set<Factory<OneSequenceGestureRecognizer>>? gestureRecognizers =
291-
const <Factory<OneSequenceGestureRecognizer>>{},
292-
Map<String, dynamic> mapOptions = const <String, dynamic>{},
282+
required MapWidgetConfiguration widgetConfiguration,
283+
MapObjects mapObjects = const MapObjects(),
284+
MapConfiguration mapConfiguration = const MapConfiguration(),
293285
}) {
294286
onPlatformViewCreated(0);
295287
createdIds.add(creationId);

0 commit comments

Comments
 (0)