diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md index c93d3e2fa5bc..c47578b208a4 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.3.0 + +* Adds a `cloudMapId` parameter to support cloud-based map styling. + ## 2.2.7 * Removes obsolete null checks on non-nullable values. diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/map_configuration.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/map_configuration.dart index 4b43caffe5b6..5580e9eea98b 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/map_configuration.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/map_configuration.dart @@ -33,6 +33,7 @@ class MapConfiguration { this.indoorViewEnabled, this.trafficEnabled, this.buildingsEnabled, + this.cloudMapId, }); /// True if the compass UI should be shown. @@ -90,6 +91,12 @@ class MapConfiguration { /// True if 3D building display should be enabled. final bool? buildingsEnabled; + /// Identifier that's associated with a specific cloud-based map style. + /// + /// See https://developers.google.com/maps/documentation/get-map-id + /// for more details. + final String? cloudMapId; + /// Returns a new options object containing only the values of this instance /// that are different from [other]. MapConfiguration diffFrom(MapConfiguration other) { @@ -143,6 +150,7 @@ class MapConfiguration { trafficEnabled != other.trafficEnabled ? trafficEnabled : null, buildingsEnabled: buildingsEnabled != other.buildingsEnabled ? buildingsEnabled : null, + cloudMapId: cloudMapId != other.cloudMapId ? cloudMapId : null, ); } @@ -171,6 +179,7 @@ class MapConfiguration { indoorViewEnabled: diff.indoorViewEnabled ?? indoorViewEnabled, trafficEnabled: diff.trafficEnabled ?? trafficEnabled, buildingsEnabled: diff.buildingsEnabled ?? buildingsEnabled, + cloudMapId: diff.cloudMapId ?? cloudMapId, ); } @@ -193,7 +202,8 @@ class MapConfiguration { padding == null && indoorViewEnabled == null && trafficEnabled == null && - buildingsEnabled == null; + buildingsEnabled == null && + cloudMapId == null; @override bool operator ==(Object other) { @@ -221,7 +231,8 @@ class MapConfiguration { padding == other.padding && indoorViewEnabled == other.indoorViewEnabled && trafficEnabled == other.trafficEnabled && - buildingsEnabled == other.buildingsEnabled; + buildingsEnabled == other.buildingsEnabled && + cloudMapId == other.cloudMapId; } @override @@ -244,5 +255,6 @@ class MapConfiguration { indoorViewEnabled, trafficEnabled, buildingsEnabled, + cloudMapId, ); } diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/utils/map_configuration_serialization.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/utils/map_configuration_serialization.dart index 01f4fa054570..3c3e0b714cb6 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/utils/map_configuration_serialization.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/utils/map_configuration_serialization.dart @@ -58,5 +58,6 @@ Map jsonForMapConfiguration(MapConfiguration config) { if (config.trafficEnabled != null) 'trafficEnabled': config.trafficEnabled!, if (config.buildingsEnabled != null) 'buildingsEnabled': config.buildingsEnabled!, + if (config.cloudMapId != null) 'cloudMapId': config.cloudMapId!, }; } diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml index 4970ff8b6510..a8d7b126ca35 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/packages/tree/main/packages/google_maps_f issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.2.7 +version: 2.3.0 environment: sdk: ">=2.18.0 <4.0.0" diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/types/map_configuration_test.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/types/map_configuration_test.dart index edd1fd091073..e57d2c73eefc 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/types/map_configuration_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/types/map_configuration_test.dart @@ -6,6 +6,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; +const String _kCloudMapId = '000000000000000'; // Dummy map ID. + void main() { group('diffs', () { // A options instance with every field set, to test diffs against. @@ -53,6 +55,7 @@ void main() { expect(updated.liteModeEnabled, isNot(null)); expect(updated.padding, isNot(null)); expect(updated.trafficEnabled, isNot(null)); + expect(updated.cloudMapId, null); }); test('handle compassEnabled', () async { @@ -281,6 +284,18 @@ void main() { // A diff applied to non-empty options should update that field. expect(updated.buildingsEnabled, true); }); + + test('handle cloudMapId', () async { + const MapConfiguration diff = MapConfiguration(cloudMapId: _kCloudMapId); + + const MapConfiguration empty = MapConfiguration(); + final MapConfiguration updated = diffBase.applyDiff(diff); + + // A diff applied to empty options should be the diff itself. + expect(empty.applyDiff(diff), diff); + // A diff applied to non-empty options should update that field. + expect(updated.cloudMapId, _kCloudMapId); + }); }); group('isEmpty', () { @@ -408,5 +423,11 @@ void main() { expect(diff.isEmpty, false); }); + + test('is false with cloudMapId', () async { + const MapConfiguration diff = MapConfiguration(cloudMapId: _kCloudMapId); + + expect(diff.isEmpty, false); + }); }); } diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/utils/map_configuration_serialization_test.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/utils/map_configuration_serialization_test.dart index 71a0f8c4b1b1..80618356c1c9 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/utils/map_configuration_serialization_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/test/utils/map_configuration_serialization_test.dart @@ -7,6 +7,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; import 'package:google_maps_flutter_platform_interface/src/types/utils/map_configuration_serialization.dart'; +const String _kCloudMapId = '000000000000000'; // Dummy map ID. + void main() { test('empty serialization', () async { const MapConfiguration config = MapConfiguration(); @@ -18,26 +20,26 @@ void main() { test('complete serialization', () async { final MapConfiguration config = MapConfiguration( - compassEnabled: false, - mapToolbarEnabled: false, - cameraTargetBounds: CameraTargetBounds(LatLngBounds( - northeast: const LatLng(30, 20), southwest: const LatLng(10, 40))), - mapType: MapType.normal, - minMaxZoomPreference: const MinMaxZoomPreference(1.0, 10.0), - rotateGesturesEnabled: false, - scrollGesturesEnabled: false, - tiltGesturesEnabled: false, - trackCameraPosition: false, - zoomControlsEnabled: false, - zoomGesturesEnabled: false, - liteModeEnabled: false, - myLocationEnabled: false, - myLocationButtonEnabled: false, - padding: const EdgeInsets.all(5.0), - indoorViewEnabled: false, - trafficEnabled: false, - buildingsEnabled: false, - ); + compassEnabled: false, + mapToolbarEnabled: false, + cameraTargetBounds: CameraTargetBounds(LatLngBounds( + northeast: const LatLng(30, 20), southwest: const LatLng(10, 40))), + mapType: MapType.normal, + minMaxZoomPreference: const MinMaxZoomPreference(1.0, 10.0), + rotateGesturesEnabled: false, + scrollGesturesEnabled: false, + tiltGesturesEnabled: false, + trackCameraPosition: false, + zoomControlsEnabled: false, + zoomGesturesEnabled: false, + liteModeEnabled: false, + myLocationEnabled: false, + myLocationButtonEnabled: false, + padding: const EdgeInsets.all(5.0), + indoorViewEnabled: false, + trafficEnabled: false, + buildingsEnabled: false, + cloudMapId: _kCloudMapId); final Map json = jsonForMapConfiguration(config); @@ -69,7 +71,8 @@ void main() { 'padding': [5.0, 5.0, 5.0, 5.0], 'indoorEnabled': false, 'trafficEnabled': false, - 'buildingsEnabled': false + 'buildingsEnabled': false, + 'cloudMapId': _kCloudMapId }); }); }