From 56b3a8433ab8b04c3514f8ef5e826c2a99e253e1 Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Tue, 9 Oct 2018 13:25:36 +0800 Subject: [PATCH 01/16] [google_maps_flutter] add zoom controls property --- packages/google_maps_flutter/android/build.gradle | 2 +- .../io/flutter/plugins/googlemaps/Convert.java | 4 ++++ .../plugins/googlemaps/GoogleMapBuilder.java | 5 +++++ .../plugins/googlemaps/GoogleMapController.java | 5 +++++ .../plugins/googlemaps/GoogleMapOptionsSink.java | 2 ++ .../google_maps_flutter/example/lib/map_ui.dart | 15 +++++++++++++++ .../ios/Classes/GoogleMapController.h | 1 + .../ios/Classes/GoogleMapController.m | 4 ++++ .../ios/Classes/GoogleMapsPlugin.m | 4 ++++ packages/google_maps_flutter/lib/src/ui.dart | 8 ++++++++ 10 files changed, 49 insertions(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/android/build.gradle b/packages/google_maps_flutter/android/build.gradle index de7708c0f738..556f0212eca0 100644 --- a/packages/google_maps_flutter/android/build.gradle +++ b/packages/google_maps_flutter/android/build.gradle @@ -33,6 +33,6 @@ android { } dependencies { - implementation 'com.google.android.gms:play-services-maps:15.+' + implementation 'com.google.android.gms:play-services-maps:16.+' } } diff --git a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java index f26d675de5de..5affb9b81b5d 100644 --- a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java +++ b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java @@ -209,6 +209,10 @@ static void interpretGoogleMapOptions(Object o, GoogleMapOptionsSink sink) { if (zoomGesturesEnabled != null) { sink.setZoomGesturesEnabled(toBoolean(zoomGesturesEnabled)); } + final Object zoomControlsEnabled = data.get("zoomControlsEnabled"); + if (zoomControlsEnabled != null) { + sink.setZoomControlsEnabled(toBoolean(zoomControlsEnabled)); + } } static void interpretMarkerOptions(Object o, MarkerOptionsSink sink) { diff --git a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapBuilder.java b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapBuilder.java index d2b1c6db4e93..447c8d4d9bea 100644 --- a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapBuilder.java +++ b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapBuilder.java @@ -78,4 +78,9 @@ public void setTiltGesturesEnabled(boolean tiltGesturesEnabled) { public void setZoomGesturesEnabled(boolean zoomGesturesEnabled) { options.zoomGesturesEnabled(zoomGesturesEnabled); } + + @Override + public void setZoomControlsEnabled(boolean zoomControlsEnabled) { + options.zoomControlsEnabled(zoomControlsEnabled); + } } diff --git a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java index 7cf2ebd526cc..a3f0db9d1005 100644 --- a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java +++ b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java @@ -393,4 +393,9 @@ public void setMinMaxZoomPreference(Float min, Float max) { public void setZoomGesturesEnabled(boolean zoomGesturesEnabled) { googleMap.getUiSettings().setZoomGesturesEnabled(zoomGesturesEnabled); } + + @Override + public void setZoomControlsEnabled(boolean zoomControlsEnabled) { + googleMap.getUiSettings().setZoomControlsEnabled(zoomControlsEnabled); + } } diff --git a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapOptionsSink.java b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapOptionsSink.java index 80607ded7f2a..963f35d513a9 100644 --- a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapOptionsSink.java +++ b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapOptionsSink.java @@ -28,4 +28,6 @@ interface GoogleMapOptionsSink { void setTrackCameraPosition(boolean trackCameraPosition); void setZoomGesturesEnabled(boolean zoomGesturesEnabled); + + void setZoomControlsEnabled(boolean zoomControlsEnabled); } diff --git a/packages/google_maps_flutter/example/lib/map_ui.dart b/packages/google_maps_flutter/example/lib/map_ui.dart index 2dcf41fec8fe..e83cc8752976 100644 --- a/packages/google_maps_flutter/example/lib/map_ui.dart +++ b/packages/google_maps_flutter/example/lib/map_ui.dart @@ -182,6 +182,20 @@ class MapUiBodyState extends State { ); } + Widget _zoomControlsToggler() { + return FlatButton( + child: Text( + '${_options.zoomControlsEnabled ? 'disable' : 'enable'} zoom controls'), + onPressed: () { + mapController.updateMapOptions( + GoogleMapOptions( + zoomControlsEnabled: !_options.zoomControlsEnabled, + ), + ); + }, + ); + } + @override Widget build(BuildContext context) { final List columnChildren = [ @@ -226,6 +240,7 @@ class MapUiBodyState extends State { _scrollToggler(), _tiltToggler(), _zoomToggler(), + _zoomControlsToggler(), ], ), ), diff --git a/packages/google_maps_flutter/ios/Classes/GoogleMapController.h b/packages/google_maps_flutter/ios/Classes/GoogleMapController.h index ae7dec03df97..82477aa0caac 100644 --- a/packages/google_maps_flutter/ios/Classes/GoogleMapController.h +++ b/packages/google_maps_flutter/ios/Classes/GoogleMapController.h @@ -27,6 +27,7 @@ - (void)setTiltGesturesEnabled:(BOOL)enabled; - (void)setTrackCameraPosition:(BOOL)enabled; - (void)setZoomGesturesEnabled:(BOOL)enabled; +- (void)setZoomControlsEnabled:(BOOL)enabled; @end // Defines map overlay controllable from Flutter. diff --git a/packages/google_maps_flutter/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/ios/Classes/GoogleMapController.m index 3a26a44cc5e1..285a61122548 100644 --- a/packages/google_maps_flutter/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/ios/Classes/GoogleMapController.m @@ -128,6 +128,10 @@ - (void)setZoomGesturesEnabled:(BOOL)enabled { _mapView.settings.zoomGestures = enabled; } +- (void)setZoomControlsEnabled:(BOOL)enabled { + // Noop on iOS. +} + #pragma mark - GMSMapViewDelegate methods - (void)mapView:(GMSMapView*)mapView willMove:(BOOL)gesture { diff --git a/packages/google_maps_flutter/ios/Classes/GoogleMapsPlugin.m b/packages/google_maps_flutter/ios/Classes/GoogleMapsPlugin.m index 3058629e8519..c234606db2ed 100644 --- a/packages/google_maps_flutter/ios/Classes/GoogleMapsPlugin.m +++ b/packages/google_maps_flutter/ios/Classes/GoogleMapsPlugin.m @@ -292,6 +292,10 @@ static void interpretMapOptions(id json, id sink) { if (zoomGesturesEnabled) { [sink setZoomGesturesEnabled:toBool(zoomGesturesEnabled)]; } + id zoomControlsEnabled = data[@"zoomControlsEnabled"]; + if (zoomControlsEnabled) { + [sink setZoomControlsEnabled:toBool(zoomControlsEnabled)]; + } } static void interpretMarkerOptions(id json, id sink, diff --git a/packages/google_maps_flutter/lib/src/ui.dart b/packages/google_maps_flutter/lib/src/ui.dart index acedb0eb2d88..73dcfaffca34 100644 --- a/packages/google_maps_flutter/lib/src/ui.dart +++ b/packages/google_maps_flutter/lib/src/ui.dart @@ -86,6 +86,7 @@ class GoogleMapOptions { this.tiltGesturesEnabled, this.trackCameraPosition, this.zoomGesturesEnabled, + this.zoomControlsEnabled, }); /// The desired position of the map camera. @@ -125,6 +126,9 @@ class GoogleMapOptions { /// True if the map view should respond to zoom gestures. final bool zoomGesturesEnabled; + /// True if the map view should show zoom controls. + final bool zoomControlsEnabled; + /// Default user interface options. /// /// Specifies a map view that @@ -138,6 +142,7 @@ class GoogleMapOptions { /// * responds to tilt gestures; [tiltGesturesEnabled] is true /// * is silent about camera movement; [trackCameraPosition] is false /// * responds to zoom gestures; [zoomGesturesEnabled] is true + /// * shows zoom controls; [zoomControlsEnabled] is true static final GoogleMapOptions defaultOptions = GoogleMapOptions( compassEnabled: true, cameraPosition: const CameraPosition(target: LatLng(0.0, 0.0)), @@ -149,6 +154,7 @@ class GoogleMapOptions { tiltGesturesEnabled: true, trackCameraPosition: false, zoomGesturesEnabled: true, + zoomControlsEnabled: false, ); /// Creates a new options object whose values are the same as this instance, @@ -172,6 +178,7 @@ class GoogleMapOptions { tiltGesturesEnabled: change.tiltGesturesEnabled ?? tiltGesturesEnabled, trackCameraPosition: change.trackCameraPosition ?? trackCameraPosition, zoomGesturesEnabled: change.zoomGesturesEnabled ?? zoomGesturesEnabled, + zoomControlsEnabled: change.zoomControlsEnabled ?? zoomControlsEnabled, ); } @@ -194,6 +201,7 @@ class GoogleMapOptions { addIfPresent('tiltGesturesEnabled', tiltGesturesEnabled); addIfPresent('trackCameraPosition', trackCameraPosition); addIfPresent('zoomGesturesEnabled', zoomGesturesEnabled); + addIfPresent('zoomControlsEnabled', zoomControlsEnabled); return json; } } From 8cf78e6ae4f699df070b0dba51b77f04e762a1e1 Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Mon, 13 May 2019 14:52:16 +0100 Subject: [PATCH 02/16] Code cleanup --- .../plugins/googlemaps/GoogleMapController.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java index ffbdab6cb0d5..7d3a4fc10124 100644 --- a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java +++ b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java @@ -68,6 +68,7 @@ final class GoogleMapController private boolean trackCameraPosition = false; private boolean myLocationEnabled = false; private boolean myLocationButtonEnabled = false; + private boolean zoomControlsEnabled = false; private boolean disposed = false; private final float density; private MethodChannel.Result mapReadyResult; @@ -495,9 +496,15 @@ public void setMyLocationButtonEnabled(boolean myLocationButtonEnabled) { @Override public void setZoomControlsEnabled(boolean zoomControlsEnabled) { - googleMap.getUiSettings().setZoomControlsEnabled(zoomControlsEnabled); + if (this.zoomControlsEnabled == zoomControlsEnabled) { + return; + } + this.zoomControlsEnabled = zoomControlsEnabled; + if (googleMap != null) { + googleMap.getUiSettings().setZoomControlsEnabled(zoomControlsEnabled); + } } - + @Override public void setInitialMarkers(Object initialMarkers) { this.initialMarkers = (List) initialMarkers; From 35a1aaa0afe5a41b9e323e1aa7e3c7540bd6f7a9 Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Fri, 21 Jun 2019 10:18:22 +0800 Subject: [PATCH 03/16] Update tests for new zoomControlsEnabled flag --- .../test_driver/google_map_inspector.dart | 4 ++ .../example/test_driver/google_maps.dart | 40 +++++++++++++++++++ .../test/fake_maps_controllers.dart | 5 +++ .../test/google_map_test.dart | 29 ++++++++++++++ 4 files changed, 78 insertions(+) diff --git a/packages/google_maps_flutter/example/test_driver/google_map_inspector.dart b/packages/google_maps_flutter/example/test_driver/google_map_inspector.dart index e426772c723a..4d6a7b2d706a 100644 --- a/packages/google_maps_flutter/example/test_driver/google_map_inspector.dart +++ b/packages/google_maps_flutter/example/test_driver/google_map_inspector.dart @@ -30,6 +30,10 @@ class GoogleMapInspector { return await _channel.invokeMethod('map#isZoomGesturesEnabled'); } + Future isZoomControlsEnabled() async { + return await _channel.invokeMethod('map#isZoomControlsEnabled'); + } + Future isRotateGesturesEnabled() async { return await _channel.invokeMethod('map#isRotateGesturesEnabled'); } diff --git a/packages/google_maps_flutter/example/test_driver/google_maps.dart b/packages/google_maps_flutter/example/test_driver/google_maps.dart index fe016af21def..e963ef5aa8ff 100644 --- a/packages/google_maps_flutter/example/test_driver/google_maps.dart +++ b/packages/google_maps_flutter/example/test_driver/google_maps.dart @@ -145,6 +145,46 @@ void main() { expect(zoomGesturesEnabled, true); }); + test('testZoomControlsEnabled', () async { + final Key key = GlobalKey(); + final Completer inspectorCompleter = + Completer(); + + await pumpWidget(Directionality( + textDirection: TextDirection.ltr, + child: GoogleMap( + key: key, + initialCameraPosition: _kInitialCameraPosition, + zoomControlsEnabled: false, + onMapCreated: (GoogleMapController controller) { + final GoogleMapInspector inspector = + // ignore: invalid_use_of_visible_for_testing_member + GoogleMapInspector(controller.channel); + inspectorCompleter.complete(inspector); + }, + ), + )); + + final GoogleMapInspector inspector = await inspectorCompleter.future; + bool zoomControlsEnabled = await inspector.isZoomControlsEnabled(); + expect(zoomControlsEnabled, false); + + await pumpWidget(Directionality( + textDirection: TextDirection.ltr, + child: GoogleMap( + key: key, + initialCameraPosition: _kInitialCameraPosition, + zoomControlsEnabled: true, + onMapCreated: (GoogleMapController controller) { + fail("OnMapCreated should get called only once."); + }, + ), + )); + + zoomControlsEnabled = await inspector.isZoomControlsEnabled(); + expect(zoomControlsEnabled, true); + }); + test('testRotateGesturesEnabled', () async { final Key key = GlobalKey(); final Completer inspectorCompleter = diff --git a/packages/google_maps_flutter/test/fake_maps_controllers.dart b/packages/google_maps_flutter/test/fake_maps_controllers.dart index 33990635157c..126b086d2d02 100644 --- a/packages/google_maps_flutter/test/fake_maps_controllers.dart +++ b/packages/google_maps_flutter/test/fake_maps_controllers.dart @@ -41,6 +41,8 @@ class FakePlatformGoogleMap { bool zoomGesturesEnabled; + bool zoomControlsEnabled; + bool trackCameraPosition; bool myLocationEnabled; @@ -330,6 +332,9 @@ class FakePlatformGoogleMap { if (options.containsKey('zoomGesturesEnabled')) { zoomGesturesEnabled = options['zoomGesturesEnabled']; } + if (options.containsKey('zoomControlsEnabled')) { + zoomControlsEnabled = options['zoomControlsEnabled']; + } if (options.containsKey('myLocationEnabled')) { myLocationEnabled = options['myLocationEnabled']; } diff --git a/packages/google_maps_flutter/test/google_map_test.dart b/packages/google_maps_flutter/test/google_map_test.dart index 7ebebccc488b..9ee09dbf78b7 100644 --- a/packages/google_maps_flutter/test/google_map_test.dart +++ b/packages/google_maps_flutter/test/google_map_test.dart @@ -355,6 +355,35 @@ void main() { expect(platformGoogleMap.zoomGesturesEnabled, true); }); + testWidgets('Can update zoomControlsEnabled', (WidgetTester tester) async { + await tester.pumpWidget( + const Directionality( + textDirection: TextDirection.ltr, + child: GoogleMap( + initialCameraPosition: CameraPosition(target: LatLng(10.0, 15.0)), + zoomControlsEnabled: false, + ), + ), + ); + + final FakePlatformGoogleMap platformGoogleMap = + fakePlatformViewsController.lastCreatedView; + + expect(platformGoogleMap.zoomControlsEnabled, false); + + await tester.pumpWidget( + const Directionality( + textDirection: TextDirection.ltr, + child: GoogleMap( + initialCameraPosition: CameraPosition(target: LatLng(10.0, 15.0)), + zoomControlsEnabled: true, + ), + ), + ); + + expect(platformGoogleMap.zoomControlsEnabled, true); + }); + testWidgets('Can update myLocationEnabled', (WidgetTester tester) async { await tester.pumpWidget( const Directionality( From 3b2646dee6902db6bf56e1b01d0757d7018e88a4 Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Fri, 21 Jun 2019 12:25:33 +0800 Subject: [PATCH 04/16] Add native parts of the isZoomControlsEnabled method. --- .../io/flutter/plugins/googlemaps/GoogleMapController.java | 5 +++++ .../google_maps_flutter/ios/Classes/GoogleMapController.m | 3 +++ 2 files changed, 8 insertions(+) diff --git a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java index d2e38a601c10..c9d096d2b005 100644 --- a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java +++ b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java @@ -299,6 +299,11 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) { result.success(googleMap.getUiSettings().isZoomGesturesEnabled()); break; } + case "map#isZoomControlsEnabled": + { + result.success(googleMap.getUiSettings().isZoomControlsEnabled()); + break; + } case "map#isScrollGesturesEnabled": { result.success(googleMap.getUiSettings().isScrollGesturesEnabled()); diff --git a/packages/google_maps_flutter/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/ios/Classes/GoogleMapController.m index c71b8574e48f..208b9a8cafb0 100644 --- a/packages/google_maps_flutter/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/ios/Classes/GoogleMapController.m @@ -214,6 +214,9 @@ - (void)onMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { } else if ([call.method isEqualToString:@"map#isZoomGesturesEnabled"]) { NSNumber* isZoomGesturesEnabled = @(_mapView.settings.zoomGestures); result(isZoomGesturesEnabled); + } else if ([call.method isEqualToString:@"map#isZoomControlsEnabled"]) { + NSNumber* isZoomControlsEnabled = @(false); + result(isZoomControlsEnabled); } else if ([call.method isEqualToString:@"map#isTiltGesturesEnabled"]) { NSNumber* isTiltGesturesEnabled = @(_mapView.settings.tiltGestures); result(isTiltGesturesEnabled); From 04e915860cd0f9729e1799701f4725a6e088e8f7 Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Fri, 21 Jun 2019 16:25:47 +0800 Subject: [PATCH 05/16] Attempt to use NSNumber numberWithBool --- packages/google_maps_flutter/ios/Classes/GoogleMapController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/ios/Classes/GoogleMapController.m index 208b9a8cafb0..e902b5dfad4f 100644 --- a/packages/google_maps_flutter/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/ios/Classes/GoogleMapController.m @@ -215,7 +215,7 @@ - (void)onMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { NSNumber* isZoomGesturesEnabled = @(_mapView.settings.zoomGestures); result(isZoomGesturesEnabled); } else if ([call.method isEqualToString:@"map#isZoomControlsEnabled"]) { - NSNumber* isZoomControlsEnabled = @(false); + NSNumber* isZoomControlsEnabled = [NSNumber numberWithBool:NO]; result(isZoomControlsEnabled); } else if ([call.method isEqualToString:@"map#isTiltGesturesEnabled"]) { NSNumber* isTiltGesturesEnabled = @(_mapView.settings.tiltGestures); From 432d06b6390e931777ab0d28c21b4667fb89f18d Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Fri, 21 Jun 2019 20:49:31 +0800 Subject: [PATCH 06/16] Do not run the full zoomControls test on iOS. --- .../example/test_driver/google_maps.dart | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/google_maps_flutter/example/test_driver/google_maps.dart b/packages/google_maps_flutter/example/test_driver/google_maps.dart index e963ef5aa8ff..f31e7a570ae7 100644 --- a/packages/google_maps_flutter/example/test_driver/google_maps.dart +++ b/packages/google_maps_flutter/example/test_driver/google_maps.dart @@ -3,6 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'dart:async'; +import 'dart:io'; import 'package:flutter/widgets.dart'; import 'package:flutter_driver/driver_extension.dart'; @@ -169,20 +170,23 @@ void main() { bool zoomControlsEnabled = await inspector.isZoomControlsEnabled(); expect(zoomControlsEnabled, false); - await pumpWidget(Directionality( - textDirection: TextDirection.ltr, - child: GoogleMap( - key: key, - initialCameraPosition: _kInitialCameraPosition, - zoomControlsEnabled: true, - onMapCreated: (GoogleMapController controller) { - fail("OnMapCreated should get called only once."); - }, - ), - )); - - zoomControlsEnabled = await inspector.isZoomControlsEnabled(); - expect(zoomControlsEnabled, true); + /// Zoom Controls functionality is not available on iOS at the moment. + if (Platform.isAndroid) { + await pumpWidget(Directionality( + textDirection: TextDirection.ltr, + child: GoogleMap( + key: key, + initialCameraPosition: _kInitialCameraPosition, + zoomControlsEnabled: true, + onMapCreated: (GoogleMapController controller) { + fail("OnMapCreated should get called only once."); + }, + ), + )); + + zoomControlsEnabled = await inspector.isZoomControlsEnabled(); + expect(zoomControlsEnabled, true); + } }); test('testRotateGesturesEnabled', () async { From 3bd01d28cfe76b8df333aee53c96e0d5005ec6d7 Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Tue, 25 Jun 2019 09:51:57 +0800 Subject: [PATCH 07/16] [google_maps_flutter] zoom controls version bump & changelog --- packages/google_maps_flutter/CHANGELOG.md | 6 ++++-- packages/google_maps_flutter/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/CHANGELOG.md index 9be76caa2b81..71e0ec1aec51 100644 --- a/packages/google_maps_flutter/CHANGELOG.md +++ b/packages/google_maps_flutter/CHANGELOG.md @@ -1,11 +1,13 @@ -## 0.5.19 +## 0.5.20 + +* Adds support for toggling zoom controls (Android only) +## 0.5.19 * Adds support for toggling Indoor View on or off. * Allow BitmapDescriptor scaling override - ## 0.5.18 * Fixed build issue on iOS. diff --git a/packages/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/pubspec.yaml index 91f55db128e6..4ca1734202af 100644 --- a/packages/google_maps_flutter/pubspec.yaml +++ b/packages/google_maps_flutter/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter description: A Flutter plugin for integrating Google Maps in iOS and Android applications. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter -version: 0.5.19 +version: 0.5.20 dependencies: flutter: From 11b445a023df8ae949c29f94e1567534df45bbaa Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Fri, 7 Feb 2020 11:34:26 +0000 Subject: [PATCH 08/16] Addresses PR feedback --- packages/google_maps_flutter/example/lib/map_ui.dart | 1 + .../google_maps_flutter/ios/Classes/GoogleMapController.m | 4 ---- packages/google_maps_flutter/lib/src/google_map.dart | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/google_maps_flutter/example/lib/map_ui.dart b/packages/google_maps_flutter/example/lib/map_ui.dart index b8b1921d142f..48485dd67f87 100644 --- a/packages/google_maps_flutter/example/lib/map_ui.dart +++ b/packages/google_maps_flutter/example/lib/map_ui.dart @@ -282,6 +282,7 @@ class MapUiBodyState extends State { scrollGesturesEnabled: _scrollGesturesEnabled, tiltGesturesEnabled: _tiltGesturesEnabled, zoomGesturesEnabled: _zoomGesturesEnabled, + zoomControlsEnabled: _zoomControlsEnabled, indoorViewEnabled: _indoorViewEnabled, myLocationEnabled: _myLocationEnabled, myLocationButtonEnabled: _myLocationButtonEnabled, diff --git a/packages/google_maps_flutter/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/ios/Classes/GoogleMapController.m index 81368e64f421..0c422a325eeb 100644 --- a/packages/google_maps_flutter/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/ios/Classes/GoogleMapController.m @@ -359,10 +359,6 @@ - (void)setZoomGesturesEnabled:(BOOL)enabled { _mapView.settings.zoomGestures = enabled; } -- (void)setZoomControlsEnabled:(BOOL)enabled { - // Noop on iOS. -} - - (void)setMyLocationEnabled:(BOOL)enabled { _mapView.myLocationEnabled = enabled; } diff --git a/packages/google_maps_flutter/lib/src/google_map.dart b/packages/google_maps_flutter/lib/src/google_map.dart index 497d014b73a8..4164552acb09 100644 --- a/packages/google_maps_flutter/lib/src/google_map.dart +++ b/packages/google_maps_flutter/lib/src/google_map.dart @@ -89,7 +89,7 @@ class GoogleMap extends StatefulWidget { /// True if the map view should respond to scroll gestures. final bool scrollGesturesEnabled; - /// True if the map view should show zoom controls. + /// True if the map view should show zoom controls. Android only. final bool zoomControlsEnabled; /// True if the map view should respond to zoom gestures. From 9da6927253fe30d8cad01fdfc0e6aa77f7e5e50d Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Sun, 9 Feb 2020 10:19:21 +0000 Subject: [PATCH 09/16] Updates e2e test syntax --- .../example/test_driver/google_maps_e2e.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google_maps_flutter/example/test_driver/google_maps_e2e.dart b/packages/google_maps_flutter/example/test_driver/google_maps_e2e.dart index c5cc59526508..779b23cce709 100644 --- a/packages/google_maps_flutter/example/test_driver/google_maps_e2e.dart +++ b/packages/google_maps_flutter/example/test_driver/google_maps_e2e.dart @@ -220,12 +220,12 @@ void main() { expect(zoomGesturesEnabled, true); }); - test('testZoomControlsEnabled', () async { + testWidgets('testZoomControlsEnabled', (WidgetTester tester) async { final Key key = GlobalKey(); final Completer inspectorCompleter = Completer(); - await pumpWidget(Directionality( + await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, child: GoogleMap( key: key, @@ -246,7 +246,7 @@ void main() { /// Zoom Controls functionality is not available on iOS at the moment. if (Platform.isAndroid) { - await pumpWidget(Directionality( + await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, child: GoogleMap( key: key, From e8957fe7c1016813280932d6ae0d790d0567ff54 Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Sun, 9 Feb 2020 10:53:10 +0000 Subject: [PATCH 10/16] Reverts the default value to the Android logic --- .../io/flutter/plugins/googlemaps/GoogleMapController.java | 2 +- .../example/test_driver/google_maps_e2e.dart | 7 +++---- packages/google_maps_flutter/lib/src/google_map.dart | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java index 1867c3e23a3b..0ee8510c53ac 100644 --- a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java +++ b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java @@ -81,7 +81,7 @@ final class GoogleMapController private boolean trackCameraPosition = false; private boolean myLocationEnabled = false; private boolean myLocationButtonEnabled = false; - private boolean zoomControlsEnabled = false; + private boolean zoomControlsEnabled = true; private boolean indoorEnabled = true; private boolean trafficEnabled = false; private boolean buildingsEnabled = true; diff --git a/packages/google_maps_flutter/example/test_driver/google_maps_e2e.dart b/packages/google_maps_flutter/example/test_driver/google_maps_e2e.dart index 779b23cce709..554e7b73651f 100644 --- a/packages/google_maps_flutter/example/test_driver/google_maps_e2e.dart +++ b/packages/google_maps_flutter/example/test_driver/google_maps_e2e.dart @@ -230,7 +230,6 @@ void main() { child: GoogleMap( key: key, initialCameraPosition: _kInitialCameraPosition, - zoomControlsEnabled: false, onMapCreated: (GoogleMapController controller) { final GoogleMapInspector inspector = // ignore: invalid_use_of_visible_for_testing_member @@ -242,7 +241,7 @@ void main() { final GoogleMapInspector inspector = await inspectorCompleter.future; bool zoomControlsEnabled = await inspector.isZoomControlsEnabled(); - expect(zoomControlsEnabled, false); + expect(zoomControlsEnabled, true); /// Zoom Controls functionality is not available on iOS at the moment. if (Platform.isAndroid) { @@ -251,7 +250,7 @@ void main() { child: GoogleMap( key: key, initialCameraPosition: _kInitialCameraPosition, - zoomControlsEnabled: true, + zoomControlsEnabled: false, onMapCreated: (GoogleMapController controller) { fail("OnMapCreated should get called only once."); }, @@ -259,7 +258,7 @@ void main() { )); zoomControlsEnabled = await inspector.isZoomControlsEnabled(); - expect(zoomControlsEnabled, true); + expect(zoomControlsEnabled, false); } }); diff --git a/packages/google_maps_flutter/lib/src/google_map.dart b/packages/google_maps_flutter/lib/src/google_map.dart index 4164552acb09..3ae816fc6429 100644 --- a/packages/google_maps_flutter/lib/src/google_map.dart +++ b/packages/google_maps_flutter/lib/src/google_map.dart @@ -35,7 +35,7 @@ class GoogleMap extends StatefulWidget { this.minMaxZoomPreference = MinMaxZoomPreference.unbounded, this.rotateGesturesEnabled = true, this.scrollGesturesEnabled = true, - this.zoomControlsEnabled = false, + this.zoomControlsEnabled = true, this.zoomGesturesEnabled = true, this.tiltGesturesEnabled = true, this.myLocationEnabled = false, From c22f49ac8547862f54a345dff0ae0ea3af6c19ef Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Sun, 9 Feb 2020 10:56:26 +0000 Subject: [PATCH 11/16] Updates documentation --- packages/google_maps_flutter/lib/src/google_map.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/lib/src/google_map.dart b/packages/google_maps_flutter/lib/src/google_map.dart index 3ae816fc6429..bfec10a458f0 100644 --- a/packages/google_maps_flutter/lib/src/google_map.dart +++ b/packages/google_maps_flutter/lib/src/google_map.dart @@ -89,7 +89,8 @@ class GoogleMap extends StatefulWidget { /// True if the map view should respond to scroll gestures. final bool scrollGesturesEnabled; - /// True if the map view should show zoom controls. Android only. + /// True if the map view should show zoom controls. This includes two buttons + /// to zoom in and zoom out. The default value is `true`. Android only. final bool zoomControlsEnabled; /// True if the map view should respond to zoom gestures. From b102198b4fe08d171b868926a110f6845f1ed592 Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Sun, 9 Feb 2020 11:02:01 +0000 Subject: [PATCH 12/16] Inlude a assert when the zoomControlsEnabled property is set on iOS --- packages/google_maps_flutter/lib/src/google_map.dart | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/lib/src/google_map.dart b/packages/google_maps_flutter/lib/src/google_map.dart index bfec10a458f0..7e087b72fd0e 100644 --- a/packages/google_maps_flutter/lib/src/google_map.dart +++ b/packages/google_maps_flutter/lib/src/google_map.dart @@ -91,7 +91,17 @@ class GoogleMap extends StatefulWidget { /// True if the map view should show zoom controls. This includes two buttons /// to zoom in and zoom out. The default value is `true`. Android only. - final bool zoomControlsEnabled; + bool get zoomControlsEnabled => _zoomControlsEnabled; + + /// True if the map view should show zoom controls. This includes two buttons + /// to zoom in and zoom out. The default value is `true`. Android only. + set zoomControlsEnabled(bool newValue) { + assert(newValue && Platform.isIOS); + + _zoomControlsEnabled = newValue; + } + + bool _zoomControlsEnabled; /// True if the map view should respond to zoom gestures. final bool zoomGesturesEnabled; From 1b3d581bb61b128285ab2a0e2cb6dc556c74882b Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Sun, 9 Feb 2020 11:10:42 +0000 Subject: [PATCH 13/16] Adds assertion message --- packages/google_maps_flutter/lib/src/google_map.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/lib/src/google_map.dart b/packages/google_maps_flutter/lib/src/google_map.dart index 7e087b72fd0e..4c12f3af185e 100644 --- a/packages/google_maps_flutter/lib/src/google_map.dart +++ b/packages/google_maps_flutter/lib/src/google_map.dart @@ -96,7 +96,7 @@ class GoogleMap extends StatefulWidget { /// True if the map view should show zoom controls. This includes two buttons /// to zoom in and zoom out. The default value is `true`. Android only. set zoomControlsEnabled(bool newValue) { - assert(newValue && Platform.isIOS); + assert(newValue && Platform.isIOS, 'Property is not supported on iOS'); _zoomControlsEnabled = newValue; } From 5ba5f5f97ef3953713edeeae23241c6620f1035e Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Sun, 9 Feb 2020 17:39:19 +0000 Subject: [PATCH 14/16] Reverts the manual setter and extends the documentation --- .../google_maps_flutter/lib/src/google_map.dart | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/packages/google_maps_flutter/lib/src/google_map.dart b/packages/google_maps_flutter/lib/src/google_map.dart index 4c12f3af185e..fe809b69e64b 100644 --- a/packages/google_maps_flutter/lib/src/google_map.dart +++ b/packages/google_maps_flutter/lib/src/google_map.dart @@ -90,18 +90,10 @@ class GoogleMap extends StatefulWidget { final bool scrollGesturesEnabled; /// True if the map view should show zoom controls. This includes two buttons - /// to zoom in and zoom out. The default value is `true`. Android only. - bool get zoomControlsEnabled => _zoomControlsEnabled; - - /// True if the map view should show zoom controls. This includes two buttons - /// to zoom in and zoom out. The default value is `true`. Android only. - set zoomControlsEnabled(bool newValue) { - assert(newValue && Platform.isIOS, 'Property is not supported on iOS'); - - _zoomControlsEnabled = newValue; - } - - bool _zoomControlsEnabled; + /// to zoom in and zoom out. The default value is to show zoom controls. + /// + /// This field is silently ignored on iOS. + final bool zoomControlsEnabled; /// True if the map view should respond to zoom gestures. final bool zoomGesturesEnabled; From dfadc6aec73b1c76b7db37cf7d8b0f69c9a60346 Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Sun, 9 Feb 2020 20:25:50 +0000 Subject: [PATCH 15/16] Adjusts e2e test to expect disabled zoom controls on iOS by default --- .../example/test_driver/google_maps_e2e.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/example/test_driver/google_maps_e2e.dart b/packages/google_maps_flutter/example/test_driver/google_maps_e2e.dart index 554e7b73651f..088d61e078e7 100644 --- a/packages/google_maps_flutter/example/test_driver/google_maps_e2e.dart +++ b/packages/google_maps_flutter/example/test_driver/google_maps_e2e.dart @@ -241,7 +241,7 @@ void main() { final GoogleMapInspector inspector = await inspectorCompleter.future; bool zoomControlsEnabled = await inspector.isZoomControlsEnabled(); - expect(zoomControlsEnabled, true); + expect(zoomControlsEnabled, Platform.isIOS ? false : true); /// Zoom Controls functionality is not available on iOS at the moment. if (Platform.isAndroid) { From 501095668f076b0bc6c11fa976968daec7951a81 Mon Sep 17 00:00:00 2001 From: Sebastian Roth Date: Mon, 30 Mar 2020 21:32:46 +0100 Subject: [PATCH 16/16] Update the documentation --- .../google_maps_flutter/lib/src/google_map.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 fe809b69e64b..f2edde3fc6aa 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 @@ -92,7 +92,7 @@ class GoogleMap extends StatefulWidget { /// True if the map view should show zoom controls. This includes two buttons /// to zoom in and zoom out. The default value is to show zoom controls. /// - /// This field is silently ignored on iOS. + /// This is only supported on Android. And this field is silently ignored on iOS. final bool zoomControlsEnabled; /// True if the map view should respond to zoom gestures.