From 76a777907d134f68907974724861c6b886217de2 Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Thu, 6 Feb 2020 01:07:36 +0530 Subject: [PATCH 01/22] added pointForMeters implemetention for iOS. --- .../ios/Classes/GoogleMapController.m | 11 +++++++++++ packages/google_maps_flutter/lib/src/controller.dart | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/packages/google_maps_flutter/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/ios/Classes/GoogleMapController.m index 37e0ad0b0cf2..455630a1e2fc 100644 --- a/packages/google_maps_flutter/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/ios/Classes/GoogleMapController.m @@ -169,6 +169,17 @@ - (void)onMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { message:@"getLatLng called prior to map initialization" details:nil]); } + } else if ([call.method isEqualToString:@"map#getDistance"]) { + if (_mapView != nil) { + CLLocationDistance meter = ToDouble(call.arguments[@"meter"]); + CLLocationCoordinate2D location = [FLTGoogleMapJsonConversions toLocation:call.arguments[@"location"]]; + CGFloat distance = [_mapView.projection pointsForMeters:meter atCoordinate:location]; + result(@(distance)); + } else { + result([FlutterError errorWithCode:@"GoogleMap uninitialized" + message:@"getPoints called prior to map initialization" + details:nil]); + } } else if ([call.method isEqualToString:@"map#waitForMap"]) { result(nil); } else if ([call.method isEqualToString:@"markers#update"]) { diff --git a/packages/google_maps_flutter/lib/src/controller.dart b/packages/google_maps_flutter/lib/src/controller.dart index c6c64a5365a8..a87dbe556109 100644 --- a/packages/google_maps_flutter/lib/src/controller.dart +++ b/packages/google_maps_flutter/lib/src/controller.dart @@ -236,4 +236,15 @@ class GoogleMapController { 'map#getLatLng', screenCoordinate._toJson()); return LatLng(latLng[0], latLng[1]); } + + /// Returns [double] corresponding to the distance in meters of the [LatLng] in the current map view. + /// + /// Return NaN (Not-a-Number) if unable to get distance in meters. + /// This is only accurate for small Earth distances. + Future getDistance(double meters, LatLng latLng) async { + final double distance = await channel.invokeMethod( + 'map#getDistance', + {"meter": meters, "location": latLng._toJson()}); + return distance; + } } From 27ebbcc532d348fcd177e932d9dd071cc31a3656 Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Thu, 6 Feb 2020 01:53:59 +0530 Subject: [PATCH 02/22] added integration test for pointForMeters --- .../example/test_driver/google_maps_e2e.dart | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) 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 1b1c086e3497..e33cb0bd9a49 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 @@ -703,6 +703,35 @@ void main() { expect(topLeft, const ScreenCoordinate(x: 0, y: 0)); }); + testWidgets('testGetDistance', (WidgetTester tester) async { + final Key key = GlobalKey(); + final Completer controllerCompleter = + Completer(); + + await tester.pumpWidget(Directionality( + textDirection: TextDirection.ltr, + child: GoogleMap( + key: key, + initialCameraPosition: _kInitialCameraPosition, + onMapCreated: (GoogleMapController controller) { + controllerCompleter.complete(controller); + }, + ), + )); + final GoogleMapController controller = await controllerCompleter.future; + + // We suspected a bug in the iOS Google Maps SDK caused the camera is not properly positioned at + // initialization. https://github.com/flutter/flutter/issues/24806 + // This temporary workaround fix is provided while the actual fix in the Google Maps SDK is + // still being investigated. + // TODO(cyanglaz): Remove this temporary fix once the Maps SDK issue is resolved. + // https://github.com/flutter/flutter/issues/27550 + await tester.pumpAndSettle(const Duration(seconds: 3)); + + final double distance = await controller.getDistance(1, _kInitialMapCenter); + expect(distance, 0.00020464534463826567); + }); + testWidgets('testResizeWidget', (WidgetTester tester) async { final Completer controllerCompleter = Completer(); From e45832fd633bfd26e2aaddf58bc63b0e791974ba Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Thu, 6 Feb 2020 02:47:25 +0530 Subject: [PATCH 03/22] updated changelog and version. --- packages/google_maps_flutter/CHANGELOG.md | 5 +++++ packages/google_maps_flutter/pubspec.yaml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/CHANGELOG.md index 75a5832f78db..cfc9477a9a87 100644 --- a/packages/google_maps_flutter/CHANGELOG.md +++ b/packages/google_maps_flutter/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.5.22+1 + +* Support projection method pointForMeters to get the distance in meters to content size + from the specified LatLng in the map. + ## 0.5.22 * Support Android v2 embedding. diff --git a/packages/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/pubspec.yaml index b2ea9a193812..61e27c9b18d6 100644 --- a/packages/google_maps_flutter/pubspec.yaml +++ b/packages/google_maps_flutter/pubspec.yaml @@ -1,7 +1,7 @@ name: google_maps_flutter description: A Flutter plugin for integrating Google Maps in iOS and Android applications. homepage: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter -version: 0.5.22 +version: 0.5.22+1 dependencies: flutter: From f1264b4f64a1fad0585aceed4c6e8c3122b79506 Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Thu, 6 Feb 2020 03:07:40 +0530 Subject: [PATCH 04/22] applied flutter_plugin_tools formatter patch to fix formatting issues. --- .../example/test_driver/google_maps_e2e.dart | 2 +- .../ios/Classes/GoogleMapController.m | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 11 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 2421abc3cab5..d737518bc232 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 @@ -721,7 +721,7 @@ void main() { testWidgets('testGetDistance', (WidgetTester tester) async { final Key key = GlobalKey(); final Completer controllerCompleter = - Completer(); + Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, diff --git a/packages/google_maps_flutter/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/ios/Classes/GoogleMapController.m index 455630a1e2fc..b3052ce67405 100644 --- a/packages/google_maps_flutter/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/ios/Classes/GoogleMapController.m @@ -170,16 +170,17 @@ - (void)onMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { details:nil]); } } else if ([call.method isEqualToString:@"map#getDistance"]) { - if (_mapView != nil) { - CLLocationDistance meter = ToDouble(call.arguments[@"meter"]); - CLLocationCoordinate2D location = [FLTGoogleMapJsonConversions toLocation:call.arguments[@"location"]]; - CGFloat distance = [_mapView.projection pointsForMeters:meter atCoordinate:location]; - result(@(distance)); - } else { - result([FlutterError errorWithCode:@"GoogleMap uninitialized" - message:@"getPoints called prior to map initialization" - details:nil]); - } + if (_mapView != nil) { + CLLocationDistance meter = ToDouble(call.arguments[@"meter"]); + CLLocationCoordinate2D location = + [FLTGoogleMapJsonConversions toLocation:call.arguments[@"location"]]; + CGFloat distance = [_mapView.projection pointsForMeters:meter atCoordinate:location]; + result(@(distance)); + } else { + result([FlutterError errorWithCode:@"GoogleMap uninitialized" + message:@"getPoints called prior to map initialization" + details:nil]); + } } else if ([call.method isEqualToString:@"map#waitForMap"]) { result(nil); } else if ([call.method isEqualToString:@"markers#update"]) { From d7898d565ca977aced12ad673a3ea4d97fa3b845 Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Tue, 28 Apr 2020 13:24:14 +0530 Subject: [PATCH 05/22] moved getDistance to platform_interface --- .../google_maps_flutter_platform.dart | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart index b89d3420c68e..14eda5fb94fd 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart @@ -239,6 +239,17 @@ abstract class GoogleMapsFlutterPlatform extends PlatformInterface { throw UnimplementedError('getZoomLevel() has not been implemented.'); } + /// Returns [double] corresponding to the distance in meters of the [LatLng] in the current map view. + /// + /// Return NaN (Not-a-Number) if unable to get distance in meters. + /// This is only accurate for small Earth distances. + Future getDistance(double meters, LatLng latLng) async { + final double distance = await channel.invokeMethod( + 'map#getDistance', + {"meter": meters, "location": latLng._toJson()}); + return distance; + } + /// Returns the image bytes of the map Future takeSnapshot({ @required int mapId, From a1ef77c62c040135b62db89a4d843b73280a5a41 Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Tue, 28 Apr 2020 14:24:56 +0530 Subject: [PATCH 06/22] fixed interface and implementation for getDistance. --- .../method_channel_google_maps_flutter.dart | 8 ++++++++ .../google_maps_flutter_platform.dart | 13 ++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart index edbc51ab5afd..707ebaf928ea 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart @@ -437,6 +437,14 @@ class MethodChannelGoogleMapsFlutter extends GoogleMapsFlutterPlatform { return channel(mapId).invokeMethod('map#getZoomLevel'); } + /// Converts a distance in meters to content size. + Future getDistance(double meters, LatLng latLng, + {@required int mapId}) { + assert(meters != null && latLng != null); + return channel(mapId).invokeMethod('map#getDistance', + {"meter": meters, "location": latLng.toJson()}); + } + /// Returns the image bytes of the map @override Future takeSnapshot({ diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart index 14eda5fb94fd..d6f4e7807f84 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart @@ -239,15 +239,10 @@ abstract class GoogleMapsFlutterPlatform extends PlatformInterface { throw UnimplementedError('getZoomLevel() has not been implemented.'); } - /// Returns [double] corresponding to the distance in meters of the [LatLng] in the current map view. - /// - /// Return NaN (Not-a-Number) if unable to get distance in meters. - /// This is only accurate for small Earth distances. - Future getDistance(double meters, LatLng latLng) async { - final double distance = await channel.invokeMethod( - 'map#getDistance', - {"meter": meters, "location": latLng._toJson()}); - return distance; + /// Converts a distance in meters to content size. + Future getDistance(double meters, LatLng latLng, + {@required int mapId}) { + throw UnimplementedError('getDistance() has not been implemented.'); } /// Returns the image bytes of the map From 459070430bf965cad849c7d2f5546881a2a22ee8 Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Tue, 28 Apr 2020 15:18:13 +0530 Subject: [PATCH 07/22] added get distance to controller and tests. --- .../test_driver/google_map_inspector.dart | 7 ++++ .../example/test_driver/google_maps_e2e.dart | 40 +++++++++++++++++++ .../lib/src/controller.dart | 6 +++ 3 files changed, 53 insertions(+) diff --git a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_map_inspector.dart b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_map_inspector.dart index 3583d4fd5b71..b4ccdefa1321 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_map_inspector.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_map_inspector.dart @@ -37,6 +37,13 @@ class GoogleMapInspector { return zoomLevel; } + Future getDistance(double meters, LatLng latLng) async { + final double distance = + await _channel.invokeMethod('map#getDistance', + {"meter": meters, "location": latLng.toJson()}); + return distance; + } + Future isZoomGesturesEnabled() async { return await _channel.invokeMethod('map#isZoomGesturesEnabled'); } diff --git a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart index 9e557dca9cdc..e650a6722280 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart @@ -181,6 +181,46 @@ void main() { } }); + testWidgets('testGetDistance', (WidgetTester tester) async { + final Key key = GlobalKey(); + final Completer inspectorCompleter = + Completer(); + + await tester.pumpWidget(Directionality( + textDirection: TextDirection.ltr, + child: GoogleMap( + key: key, + initialCameraPosition: _kInitialCameraPosition, + zoomGesturesEnabled: 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 zoomGesturesEnabled = await inspector.isZoomGesturesEnabled(); + expect(zoomGesturesEnabled, false); + + await tester.pumpWidget(Directionality( + textDirection: TextDirection.ltr, + child: GoogleMap( + key: key, + initialCameraPosition: _kInitialCameraPosition, + zoomGesturesEnabled: true, + onMapCreated: (GoogleMapController controller) { + fail("OnMapCreated should get called only once."); + }, + ), + )); + + final double distance = await inspector.getDistance(1, _kInitialMapCenter); + expect(distance, 0.00020464534463826567); + }); + testWidgets('testZoomGesturesEnabled', (WidgetTester tester) async { final Key key = GlobalKey(); final Completer inspectorCompleter = 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 f5ee180ab1fd..bf590eb11271 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 @@ -254,6 +254,12 @@ class GoogleMapController { return _googleMapsFlutterPlatform.getZoomLevel(mapId: mapId); } + /// Converts a distance in meters to content size. + Future getDistance(double meters, LatLng latLng) { + return _googleMapsFlutterPlatform.getDistance( + meters: meters, latLng: latLng, mapId: mapId); + } + /// Returns the image bytes of the map Future takeSnapshot() { return _googleMapsFlutterPlatform.takeSnapshot(mapId: mapId); From 9fc32e5cd066e39304167cc633031862ad93e20e Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Tue, 28 Apr 2020 15:31:40 +0530 Subject: [PATCH 08/22] fixed syntax issue in getDistance in controller --- .../google_maps_flutter/lib/src/controller.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 bf590eb11271..cca3617e5898 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 @@ -256,8 +256,7 @@ class GoogleMapController { /// Converts a distance in meters to content size. Future getDistance(double meters, LatLng latLng) { - return _googleMapsFlutterPlatform.getDistance( - meters: meters, latLng: latLng, mapId: mapId); + return _googleMapsFlutterPlatform.getDistance(meters, latLng, mapId: mapId); } /// Returns the image bytes of the map From f5babcd4e4c94cfd8ac5babd10e588522b8b2d09 Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Tue, 28 Apr 2020 15:38:30 +0530 Subject: [PATCH 09/22] formatted using flutter_plugin_tools --- .../example/test_driver/google_map_inspector.dart | 4 ++-- .../example/test_driver/google_maps_e2e.dart | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_map_inspector.dart b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_map_inspector.dart index b4ccdefa1321..d7586e6d9626 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_map_inspector.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_map_inspector.dart @@ -38,8 +38,8 @@ class GoogleMapInspector { } Future getDistance(double meters, LatLng latLng) async { - final double distance = - await _channel.invokeMethod('map#getDistance', + final double distance = await _channel.invokeMethod( + 'map#getDistance', {"meter": meters, "location": latLng.toJson()}); return distance; } diff --git a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart index e650a6722280..dbc19d274088 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart @@ -184,7 +184,7 @@ void main() { testWidgets('testGetDistance', (WidgetTester tester) async { final Key key = GlobalKey(); final Completer inspectorCompleter = - Completer(); + Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, @@ -194,8 +194,8 @@ void main() { zoomGesturesEnabled: false, onMapCreated: (GoogleMapController controller) { final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel); + // ignore: invalid_use_of_visible_for_testing_member + GoogleMapInspector(controller.channel); inspectorCompleter.complete(inspector); }, ), From 09694ceb5bae8e952cfcfe7ef6c46af01e64c64e Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Tue, 28 Apr 2020 15:54:07 +0530 Subject: [PATCH 10/22] bumped google_maps_flutter_platform_interface to 1.0.2 --- packages/google_maps_flutter/google_maps_flutter/pubspec.yaml | 2 +- .../google_maps_flutter_platform_interface/CHANGELOG.md | 4 ++++ .../google_maps_flutter_platform_interface/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml index c2ca53dd4b83..a3ec60029dc8 100644 --- a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml @@ -7,7 +7,7 @@ dependencies: flutter: sdk: flutter flutter_plugin_android_lifecycle: ^1.0.0 - google_maps_flutter_platform_interface: ^1.0.1 + google_maps_flutter_platform_interface: ^1.0.2 dev_dependencies: flutter_test: 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 54c2ab5338f1..2a6ff8926656 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 @@ +## 1.0.2 + +* Added getDistance api + ## 1.0.1 * Initial open source release. 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 346d96050166..3241590fe879 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 @@ -3,7 +3,7 @@ description: A common platform interface for the google_maps_flutter plugin. homepage: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter/google_maps_flutter_platform_interface # 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: 1.0.1 +version: 1.0.2 dependencies: flutter: From 4aaef503052a7c84e6af61e2c17ddeb67de1de1c Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Wed, 29 Apr 2020 00:48:04 +0530 Subject: [PATCH 11/22] updated getDistance test to not use hardcoded pointForMeters --- .../example/test_driver/google_maps_e2e.dart | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart index dbc19d274088..34c2734e2bf5 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart @@ -4,6 +4,7 @@ import 'dart:async'; import 'dart:io'; +import 'dart:math'; import 'dart:typed_data'; import 'package:e2e/e2e.dart'; @@ -217,8 +218,14 @@ void main() { ), )); - final double distance = await inspector.getDistance(1, _kInitialMapCenter); - expect(distance, 0.00020464534463826567); + final double distance = + await inspector.getDistance(1, _kInitialCameraPosition.target); + // Formula is from Chris Broadfoot's comment : https://groups.google.com/d/msg/google-maps-js-api-v3/hDRO4oHVSeM/osOYQYXg2oUJ + final double meters_per_pixel = 156543.03392 * + cos(_kInitialCameraPosition.target.latitude * pi / 180) / + pow(2, _kInitialZoomLevel); + final double points_per_meter = 1 / meters_per_pixel; + expect(distance, moreOrLessEquals(points_per_meter, epsilon: 1e-5)); }); testWidgets('testZoomGesturesEnabled', (WidgetTester tester) async { @@ -897,8 +904,14 @@ void main() { // https://github.com/flutter/flutter/issues/27550 await tester.pumpAndSettle(const Duration(seconds: 3)); - final double distance = await controller.getDistance(1, _kInitialMapCenter); - expect(distance, 0.00020464534463826567); + final double distance = + await controller.getDistance(1, _kInitialCameraPosition.target); + // Formula is from Chris Broadfoot's comment : https://groups.google.com/d/msg/google-maps-js-api-v3/hDRO4oHVSeM/osOYQYXg2oUJ + final double meters_per_pixel = 156543.03392 * + cos(_kInitialCameraPosition.target.latitude * pi / 180) / + pow(2, _kInitialZoomLevel); + final double points_per_meter = 1 / meters_per_pixel; + expect(distance, moreOrLessEquals(points_per_meter, epsilon: 1e-5)); }); testWidgets('testResizeWidget', (WidgetTester tester) async { From 2b80e0be1f8f04a3f42a184f3904f8d56a8feb54 Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Wed, 29 Apr 2020 00:49:00 +0530 Subject: [PATCH 12/22] updated google_maps_flutter_platform_interface to use relative path. --- packages/google_maps_flutter/google_maps_flutter/pubspec.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml index a3ec60029dc8..219675a9a1f5 100644 --- a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml @@ -7,7 +7,8 @@ dependencies: flutter: sdk: flutter flutter_plugin_android_lifecycle: ^1.0.0 - google_maps_flutter_platform_interface: ^1.0.2 + google_maps_flutter_platform_interface: + path: ../google_maps_flutter_platform_interface dev_dependencies: flutter_test: From d56f01da7e2283afa4eb0f60944db89a7f85e7f5 Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Wed, 29 Apr 2020 01:12:09 +0530 Subject: [PATCH 13/22] renamed getDistance to getPoint. --- .../test_driver/google_map_inspector.dart | 7 --- .../example/test_driver/google_maps_e2e.dart | 54 ++----------------- .../ios/Classes/GoogleMapController.m | 6 +-- .../lib/src/controller.dart | 4 +- .../CHANGELOG.md | 2 +- .../method_channel_google_maps_flutter.dart | 5 +- .../google_maps_flutter_platform.dart | 5 +- 7 files changed, 14 insertions(+), 69 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_map_inspector.dart b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_map_inspector.dart index d7586e6d9626..3583d4fd5b71 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_map_inspector.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_map_inspector.dart @@ -37,13 +37,6 @@ class GoogleMapInspector { return zoomLevel; } - Future getDistance(double meters, LatLng latLng) async { - final double distance = await _channel.invokeMethod( - 'map#getDistance', - {"meter": meters, "location": latLng.toJson()}); - return distance; - } - Future isZoomGesturesEnabled() async { return await _channel.invokeMethod('map#isZoomGesturesEnabled'); } diff --git a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart index 34c2734e2bf5..bfd004dfb924 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart @@ -182,52 +182,6 @@ void main() { } }); - testWidgets('testGetDistance', (WidgetTester tester) async { - final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); - - await tester.pumpWidget(Directionality( - textDirection: TextDirection.ltr, - child: GoogleMap( - key: key, - initialCameraPosition: _kInitialCameraPosition, - zoomGesturesEnabled: 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 zoomGesturesEnabled = await inspector.isZoomGesturesEnabled(); - expect(zoomGesturesEnabled, false); - - await tester.pumpWidget(Directionality( - textDirection: TextDirection.ltr, - child: GoogleMap( - key: key, - initialCameraPosition: _kInitialCameraPosition, - zoomGesturesEnabled: true, - onMapCreated: (GoogleMapController controller) { - fail("OnMapCreated should get called only once."); - }, - ), - )); - - final double distance = - await inspector.getDistance(1, _kInitialCameraPosition.target); - // Formula is from Chris Broadfoot's comment : https://groups.google.com/d/msg/google-maps-js-api-v3/hDRO4oHVSeM/osOYQYXg2oUJ - final double meters_per_pixel = 156543.03392 * - cos(_kInitialCameraPosition.target.latitude * pi / 180) / - pow(2, _kInitialZoomLevel); - final double points_per_meter = 1 / meters_per_pixel; - expect(distance, moreOrLessEquals(points_per_meter, epsilon: 1e-5)); - }); - testWidgets('testZoomGesturesEnabled', (WidgetTester tester) async { final Key key = GlobalKey(); final Completer inspectorCompleter = @@ -879,7 +833,7 @@ void main() { expect(topLeft, const ScreenCoordinate(x: 0, y: 0)); }); - testWidgets('testGetDistance', (WidgetTester tester) async { + testWidgets('testGetPoint', (WidgetTester tester) async { final Key key = GlobalKey(); final Completer controllerCompleter = Completer(); @@ -904,14 +858,14 @@ void main() { // https://github.com/flutter/flutter/issues/27550 await tester.pumpAndSettle(const Duration(seconds: 3)); - final double distance = - await controller.getDistance(1, _kInitialCameraPosition.target); + final double points = + await controller.getPoint(1, _kInitialCameraPosition.target); // Formula is from Chris Broadfoot's comment : https://groups.google.com/d/msg/google-maps-js-api-v3/hDRO4oHVSeM/osOYQYXg2oUJ final double meters_per_pixel = 156543.03392 * cos(_kInitialCameraPosition.target.latitude * pi / 180) / pow(2, _kInitialZoomLevel); final double points_per_meter = 1 / meters_per_pixel; - expect(distance, moreOrLessEquals(points_per_meter, epsilon: 1e-5)); + expect(points, moreOrLessEquals(points_per_meter, epsilon: 1e-5)); }); testWidgets('testResizeWidget', (WidgetTester tester) async { diff --git a/packages/google_maps_flutter/google_maps_flutter/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/google_maps_flutter/ios/Classes/GoogleMapController.m index bc21ab5ee099..f6fa5ee0a2bb 100644 --- a/packages/google_maps_flutter/google_maps_flutter/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/google_maps_flutter/ios/Classes/GoogleMapController.m @@ -192,13 +192,13 @@ - (void)onMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { message:@"getLatLng called prior to map initialization" details:nil]); } - } else if ([call.method isEqualToString:@"map#getDistance"]) { + } else if ([call.method isEqualToString:@"map#getPoint"]) { if (_mapView != nil) { CLLocationDistance meter = ToDouble(call.arguments[@"meter"]); CLLocationCoordinate2D location = [FLTGoogleMapJsonConversions toLocation:call.arguments[@"location"]]; - CGFloat distance = [_mapView.projection pointsForMeters:meter atCoordinate:location]; - result(@(distance)); + CGFloat points = [_mapView.projection pointsForMeters:meter atCoordinate:location]; + result(@(points)); } else { result([FlutterError errorWithCode:@"GoogleMap uninitialized" message:@"getPoints called prior to map initialization" 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 cca3617e5898..7ac7753b6a6d 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 @@ -255,8 +255,8 @@ class GoogleMapController { } /// Converts a distance in meters to content size. - Future getDistance(double meters, LatLng latLng) { - return _googleMapsFlutterPlatform.getDistance(meters, latLng, mapId: mapId); + Future getPoint(double meters, LatLng latLng) { + return _googleMapsFlutterPlatform.getPoint(meters, latLng, mapId: mapId); } /// Returns the image bytes of the map 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 2a6ff8926656..0c3dace3c586 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,6 +1,6 @@ ## 1.0.2 -* Added getDistance api +* Added getPoint projections api for iOS ## 1.0.1 diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart index 707ebaf928ea..be215d6c15ac 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart @@ -438,10 +438,9 @@ class MethodChannelGoogleMapsFlutter extends GoogleMapsFlutterPlatform { } /// Converts a distance in meters to content size. - Future getDistance(double meters, LatLng latLng, - {@required int mapId}) { + Future getPoint(double meters, LatLng latLng, {@required int mapId}) { assert(meters != null && latLng != null); - return channel(mapId).invokeMethod('map#getDistance', + return channel(mapId).invokeMethod('map#getPoint', {"meter": meters, "location": latLng.toJson()}); } diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart index d6f4e7807f84..3f7d430ccb5d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart @@ -240,9 +240,8 @@ abstract class GoogleMapsFlutterPlatform extends PlatformInterface { } /// Converts a distance in meters to content size. - Future getDistance(double meters, LatLng latLng, - {@required int mapId}) { - throw UnimplementedError('getDistance() has not been implemented.'); + Future getPoint(double meters, LatLng latLng, {@required int mapId}) { + throw UnimplementedError('getPoint() has not been implemented.'); } /// Returns the image bytes of the map From 56a4363d921b4f7051bc5a78b29ce7776f936d3a Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Wed, 29 Apr 2020 01:41:03 +0530 Subject: [PATCH 14/22] remove relative path for google_maps_flutter_platform_interface --- .../example/test_driver/google_maps_e2e.dart | 12 +++++------- .../google_maps_flutter/pubspec.yaml | 3 +-- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart index bfd004dfb924..1e75086cdb28 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart @@ -850,13 +850,11 @@ void main() { )); final GoogleMapController controller = await controllerCompleter.future; - // We suspected a bug in the iOS Google Maps SDK caused the camera is not properly positioned at - // initialization. https://github.com/flutter/flutter/issues/24806 - // This temporary workaround fix is provided while the actual fix in the Google Maps SDK is - // still being investigated. - // TODO(cyanglaz): Remove this temporary fix once the Maps SDK issue is resolved. - // https://github.com/flutter/flutter/issues/27550 - await tester.pumpAndSettle(const Duration(seconds: 3)); + await tester.pumpAndSettle(); + // TODO(cyanglaz): Remove this after we added `mapRendered` callback, and `mapControllerCompleter.complete(controller)` above should happen + // in `mapRendered`. + // https://github.com/flutter/flutter/issues/54758 + await Future.delayed(Duration(seconds: 1)); final double points = await controller.getPoint(1, _kInitialCameraPosition.target); diff --git a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml index 219675a9a1f5..c2ca53dd4b83 100644 --- a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml @@ -7,8 +7,7 @@ dependencies: flutter: sdk: flutter flutter_plugin_android_lifecycle: ^1.0.0 - google_maps_flutter_platform_interface: - path: ../google_maps_flutter_platform_interface + google_maps_flutter_platform_interface: ^1.0.1 dev_dependencies: flutter_test: From f1af8453ac6aebb960aaff4874255a4650c1516b Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Wed, 29 Apr 2020 10:02:03 +0530 Subject: [PATCH 15/22] added getpoint to support projection method pointForMeters in iOS. --- .../google_maps_flutter_platform_interface/CHANGELOG.md | 4 ++++ .../method_channel/method_channel_google_maps_flutter.dart | 7 +++++++ .../platform_interface/google_maps_flutter_platform.dart | 5 +++++ .../google_maps_flutter_platform_interface/pubspec.yaml | 2 +- 4 files changed, 17 insertions(+), 1 deletion(-) 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 54c2ab5338f1..250300ac027a 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 @@ +## 1.0.2 + +* Support projection method pointForMeters, to get the distance in meters to content size from the specified LatLng in the map for iOS. + ## 1.0.1 * Initial open source release. diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart index edbc51ab5afd..be215d6c15ac 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart @@ -437,6 +437,13 @@ class MethodChannelGoogleMapsFlutter extends GoogleMapsFlutterPlatform { return channel(mapId).invokeMethod('map#getZoomLevel'); } + /// Converts a distance in meters to content size. + Future getPoint(double meters, LatLng latLng, {@required int mapId}) { + assert(meters != null && latLng != null); + return channel(mapId).invokeMethod('map#getPoint', + {"meter": meters, "location": latLng.toJson()}); + } + /// Returns the image bytes of the map @override Future takeSnapshot({ diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart index b89d3420c68e..3f7d430ccb5d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart @@ -239,6 +239,11 @@ abstract class GoogleMapsFlutterPlatform extends PlatformInterface { throw UnimplementedError('getZoomLevel() has not been implemented.'); } + /// Converts a distance in meters to content size. + Future getPoint(double meters, LatLng latLng, {@required int mapId}) { + throw UnimplementedError('getPoint() has not been implemented.'); + } + /// Returns the image bytes of the map Future takeSnapshot({ @required int mapId, 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 346d96050166..3241590fe879 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 @@ -3,7 +3,7 @@ description: A common platform interface for the google_maps_flutter plugin. homepage: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter/google_maps_flutter_platform_interface # 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: 1.0.1 +version: 1.0.2 dependencies: flutter: From 4ec34a11fd805126eb24dd0944d493c8605b04c1 Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Sat, 2 May 2020 10:19:55 +0530 Subject: [PATCH 16/22] method renamed to getPointsForMeters to closely follow native API --- .../method_channel/method_channel_google_maps_flutter.dart | 4 ++-- .../src/platform_interface/google_maps_flutter_platform.dart | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart index be215d6c15ac..59f69a9b0c73 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart @@ -438,9 +438,9 @@ class MethodChannelGoogleMapsFlutter extends GoogleMapsFlutterPlatform { } /// Converts a distance in meters to content size. - Future getPoint(double meters, LatLng latLng, {@required int mapId}) { + Future getPointsForMeters(double meters, LatLng latLng, {@required int mapId}) { assert(meters != null && latLng != null); - return channel(mapId).invokeMethod('map#getPoint', + return channel(mapId).invokeMethod('projection#getPointsForMeters', {"meter": meters, "location": latLng.toJson()}); } diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart index 3f7d430ccb5d..cde789b13067 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart @@ -240,8 +240,8 @@ abstract class GoogleMapsFlutterPlatform extends PlatformInterface { } /// Converts a distance in meters to content size. - Future getPoint(double meters, LatLng latLng, {@required int mapId}) { - throw UnimplementedError('getPoint() has not been implemented.'); + Future getPointsForMeters(double meters, LatLng latLng, {@required int mapId}) { + throw UnimplementedError('getPointsForMeters() has not been implemented.'); } /// Returns the image bytes of the map From 0a597002a92933fd271ba2ab753c74761e66e035 Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Sat, 2 May 2020 10:31:00 +0530 Subject: [PATCH 17/22] formatted the dart files. --- .../src/method_channel/method_channel_google_maps_flutter.dart | 3 ++- .../src/platform_interface/google_maps_flutter_platform.dart | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart index 59f69a9b0c73..db0cd38d1c1b 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart @@ -438,7 +438,8 @@ class MethodChannelGoogleMapsFlutter extends GoogleMapsFlutterPlatform { } /// Converts a distance in meters to content size. - Future getPointsForMeters(double meters, LatLng latLng, {@required int mapId}) { + Future getPointsForMeters(double meters, LatLng latLng, + {@required int mapId}) { assert(meters != null && latLng != null); return channel(mapId).invokeMethod('projection#getPointsForMeters', {"meter": meters, "location": latLng.toJson()}); diff --git a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart index cde789b13067..f2c7c07b62cb 100644 --- a/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart +++ b/packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart @@ -240,7 +240,8 @@ abstract class GoogleMapsFlutterPlatform extends PlatformInterface { } /// Converts a distance in meters to content size. - Future getPointsForMeters(double meters, LatLng latLng, {@required int mapId}) { + Future getPointsForMeters(double meters, LatLng latLng, + {@required int mapId}) { throw UnimplementedError('getPointsForMeters() has not been implemented.'); } From 87509522c69875f4feb84571045ecb25a457dcc8 Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Sat, 2 May 2020 10:44:45 +0530 Subject: [PATCH 18/22] method renamed to getPointsForMeters to closely follow native API --- .../example/test_driver/google_maps_e2e.dart | 4 ++-- .../google_maps_flutter/ios/Classes/GoogleMapController.m | 4 ++-- .../google_maps_flutter/lib/src/controller.dart | 4 ++-- packages/google_maps_flutter/google_maps_flutter/pubspec.yaml | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart index 1e75086cdb28..8681ae03f015 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart @@ -833,7 +833,7 @@ void main() { expect(topLeft, const ScreenCoordinate(x: 0, y: 0)); }); - testWidgets('testGetPoint', (WidgetTester tester) async { + testWidgets('testGetPointsForMeters', (WidgetTester tester) async { final Key key = GlobalKey(); final Completer controllerCompleter = Completer(); @@ -857,7 +857,7 @@ void main() { await Future.delayed(Duration(seconds: 1)); final double points = - await controller.getPoint(1, _kInitialCameraPosition.target); + await controller.getPointsForMeters(1, _kInitialCameraPosition.target); // Formula is from Chris Broadfoot's comment : https://groups.google.com/d/msg/google-maps-js-api-v3/hDRO4oHVSeM/osOYQYXg2oUJ final double meters_per_pixel = 156543.03392 * cos(_kInitialCameraPosition.target.latitude * pi / 180) / diff --git a/packages/google_maps_flutter/google_maps_flutter/ios/Classes/GoogleMapController.m b/packages/google_maps_flutter/google_maps_flutter/ios/Classes/GoogleMapController.m index f6fa5ee0a2bb..5acb9ad2f81b 100644 --- a/packages/google_maps_flutter/google_maps_flutter/ios/Classes/GoogleMapController.m +++ b/packages/google_maps_flutter/google_maps_flutter/ios/Classes/GoogleMapController.m @@ -192,7 +192,7 @@ - (void)onMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { message:@"getLatLng called prior to map initialization" details:nil]); } - } else if ([call.method isEqualToString:@"map#getPoint"]) { + } else if ([call.method isEqualToString:@"projection#getPointsForMeters"]) { if (_mapView != nil) { CLLocationDistance meter = ToDouble(call.arguments[@"meter"]); CLLocationCoordinate2D location = @@ -201,7 +201,7 @@ - (void)onMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { result(@(points)); } else { result([FlutterError errorWithCode:@"GoogleMap uninitialized" - message:@"getPoints called prior to map initialization" + message:@"getPointsForMeters called prior to map initialization" details:nil]); } } else if ([call.method isEqualToString:@"map#waitForMap"]) { 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 7ac7753b6a6d..5b43c2b00d48 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 @@ -255,8 +255,8 @@ class GoogleMapController { } /// Converts a distance in meters to content size. - Future getPoint(double meters, LatLng latLng) { - return _googleMapsFlutterPlatform.getPoint(meters, latLng, mapId: mapId); + Future getPointsForMeters(double meters, LatLng latLng) { + return _googleMapsFlutterPlatform.getPointsForMeters(meters, latLng, mapId: mapId); } /// Returns the image bytes of the map diff --git a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml index c2ca53dd4b83..a3ec60029dc8 100644 --- a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml @@ -7,7 +7,7 @@ dependencies: flutter: sdk: flutter flutter_plugin_android_lifecycle: ^1.0.0 - google_maps_flutter_platform_interface: ^1.0.1 + google_maps_flutter_platform_interface: ^1.0.2 dev_dependencies: flutter_test: From 8b611e81672bc88e6aa763ae6333e87d8ad4e2e8 Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Sat, 2 May 2020 10:50:21 +0530 Subject: [PATCH 19/22] formatted the dart files. --- .../google_maps_flutter/lib/src/controller.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 5b43c2b00d48..732eea186fe1 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 @@ -256,7 +256,8 @@ class GoogleMapController { /// Converts a distance in meters to content size. Future getPointsForMeters(double meters, LatLng latLng) { - return _googleMapsFlutterPlatform.getPointsForMeters(meters, latLng, mapId: mapId); + return _googleMapsFlutterPlatform.getPointsForMeters(meters, latLng, + mapId: mapId); } /// Returns the image bytes of the map From bad59e19f11c1ac9173bd5f436e6f4ad130740e6 Mon Sep 17 00:00:00 2001 From: David Iglesias Date: Mon, 4 May 2020 12:13:24 -0700 Subject: [PATCH 20/22] Update pubspec.yaml Make this depend on the version "from path" to check if all tests pass. This should make everything green except the "publishable" check. --- packages/google_maps_flutter/google_maps_flutter/pubspec.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml index a3ec60029dc8..219675a9a1f5 100644 --- a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml @@ -7,7 +7,8 @@ dependencies: flutter: sdk: flutter flutter_plugin_android_lifecycle: ^1.0.0 - google_maps_flutter_platform_interface: ^1.0.2 + google_maps_flutter_platform_interface: + path: ../google_maps_flutter_platform_interface dev_dependencies: flutter_test: From b46e906b8db7f9701d96496e4459efc2f53763db Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Tue, 5 May 2020 09:52:59 +0530 Subject: [PATCH 21/22] skip testGetPointsForMeters if not iOS implemented. --- .../example/test_driver/google_maps_e2e.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart index 8681ae03f015..cd0d026d0264 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/test_driver/google_maps_e2e.dart @@ -864,7 +864,7 @@ void main() { pow(2, _kInitialZoomLevel); final double points_per_meter = 1 / meters_per_pixel; expect(points, moreOrLessEquals(points_per_meter, epsilon: 1e-5)); - }); + }, skip: !Platform.isIOS); testWidgets('testResizeWidget', (WidgetTester tester) async { final Completer controllerCompleter = From 1f23ead456ce3c1af24e95248efe6f9f8bb94a5d Mon Sep 17 00:00:00 2001 From: "Aswin.K.V" Date: Fri, 15 May 2020 10:21:21 +0530 Subject: [PATCH 22/22] bumped minor version. --- .../google_maps_flutter_platform_interface/CHANGELOG.md | 4 ++++ .../google_maps_flutter_platform_interface/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) 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 eca5c914a603..ba44556d8d9f 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 @@ +## 1.1.0 + +* Support projection method pointForMeters, to get the distance in meters to content size from the specified LatLng in the map for iOS. + ## 1.0.2 * Update lower bound of dart dependency to 2.1.0. 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 b28b7f47652d..920701f6f409 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 @@ -3,7 +3,7 @@ description: A common platform interface for the google_maps_flutter plugin. homepage: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter/google_maps_flutter_platform_interface # 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: 1.0.2 +version: 1.1.0 dependencies: flutter: