diff --git a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md index 84f7867905ff..bf7a705556ed 100644 --- a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md @@ -1,5 +1,7 @@ -## NEXT +## 2.1.9 +* Updates integration tests to use the new inspector interface. +* Removes obsolete test-only method for accessing a map controller's method channel. * Ignores unnecessary import warnings in preparation for [upcoming Flutter changes](https://github.com/flutter/flutter/pull/106316). ## 2.1.8 diff --git a/packages/google_maps_flutter/google_maps_flutter/example/integration_test/google_map_inspector.dart b/packages/google_maps_flutter/google_maps_flutter/example/integration_test/google_map_inspector.dart index fe3461b9142f..95ca969a51e2 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/integration_test/google_map_inspector.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/integration_test/google_map_inspector.dart @@ -2,87 +2,125 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// TODO(a14n): remove this import once Flutter 3.1 or later reaches stable (including flutter/flutter#106316) -// ignore: unnecessary_import -import 'dart:typed_data'; -import 'package:flutter/services.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; - -/// Inspect Google Maps state using the platform SDK. -/// -/// This class is primarily used for testing. The methods on this -/// class should call "getters" on the GoogleMap object or equivalent -/// on the platform side. -class GoogleMapInspector { - GoogleMapInspector(this._channel); - - final MethodChannel _channel; - - Future isCompassEnabled() async { - return await _channel.invokeMethod('map#isCompassEnabled'); +import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; + +/// A method-channel-based implementation of [GoogleMapsInspectorPlatform], for +/// use in tests in conjunction with [MethodChannelGoogleMapsFlutter]. +// TODO(stuartmorgan): Move this into the platform implementations when +// federating the mobile implementations. +class MethodChannelGoogleMapsInspector extends GoogleMapsInspectorPlatform { + /// Creates a method-channel-based inspector instance that gets the channel + /// for a given map ID from [mapsPlatform]. + MethodChannelGoogleMapsInspector(MethodChannelGoogleMapsFlutter mapsPlatform) + : _mapsPlatform = mapsPlatform; + + final MethodChannelGoogleMapsFlutter _mapsPlatform; + + @override + Future areBuildingsEnabled({required int mapId}) async { + return (await _mapsPlatform + .channel(mapId) + .invokeMethod('map#isBuildingsEnabled'))!; } - Future isMapToolbarEnabled() async { - return await _channel.invokeMethod('map#isMapToolbarEnabled'); + @override + Future areRotateGesturesEnabled({required int mapId}) async { + return (await _mapsPlatform + .channel(mapId) + .invokeMethod('map#isRotateGesturesEnabled'))!; } - Future getMinMaxZoomLevels() async { - final List zoomLevels = - (await _channel.invokeMethod>('map#getMinMaxZoomLevels'))! - .cast(); - return MinMaxZoomPreference(zoomLevels[0], zoomLevels[1]); - } - - Future getZoomLevel() async { - final double? zoomLevel = - await _channel.invokeMethod('map#getZoomLevel'); - return zoomLevel; - } - - Future isZoomGesturesEnabled() async { - return await _channel.invokeMethod('map#isZoomGesturesEnabled'); + @override + Future areScrollGesturesEnabled({required int mapId}) async { + return (await _mapsPlatform + .channel(mapId) + .invokeMethod('map#isScrollGesturesEnabled'))!; } - Future isZoomControlsEnabled() async { - return await _channel.invokeMethod('map#isZoomControlsEnabled'); + @override + Future areTiltGesturesEnabled({required int mapId}) async { + return (await _mapsPlatform + .channel(mapId) + .invokeMethod('map#isTiltGesturesEnabled'))!; } - Future isLiteModeEnabled() async { - return await _channel.invokeMethod('map#isLiteModeEnabled'); + @override + Future areZoomControlsEnabled({required int mapId}) async { + return (await _mapsPlatform + .channel(mapId) + .invokeMethod('map#isZoomControlsEnabled'))!; } - Future isRotateGesturesEnabled() async { - return await _channel.invokeMethod('map#isRotateGesturesEnabled'); + @override + Future areZoomGesturesEnabled({required int mapId}) async { + return (await _mapsPlatform + .channel(mapId) + .invokeMethod('map#isZoomGesturesEnabled'))!; } - Future isTiltGesturesEnabled() async { - return await _channel.invokeMethod('map#isTiltGesturesEnabled'); + @override + Future getMinMaxZoomLevels({required int mapId}) async { + final List zoomLevels = (await _mapsPlatform + .channel(mapId) + .invokeMethod>('map#getMinMaxZoomLevels'))! + .cast(); + return MinMaxZoomPreference(zoomLevels[0], zoomLevels[1]); } - Future isScrollGesturesEnabled() async { - return await _channel.invokeMethod('map#isScrollGesturesEnabled'); + @override + Future getTileOverlayInfo(TileOverlayId tileOverlayId, + {required int mapId}) async { + final Map? tileInfo = await _mapsPlatform + .channel(mapId) + .invokeMapMethod( + 'map#getTileOverlayInfo', { + 'tileOverlayId': tileOverlayId.value, + }); + if (tileInfo == null) { + return null; + } + return TileOverlay( + tileOverlayId: tileOverlayId, + fadeIn: tileInfo['fadeIn']! as bool, + transparency: tileInfo['transparency']! as double, + visible: tileInfo['visible']! as bool, + // Android and iOS return different types. + zIndex: (tileInfo['zIndex']! as num).toInt(), + ); } - Future isMyLocationButtonEnabled() async { - return await _channel.invokeMethod('map#isMyLocationButtonEnabled'); + @override + Future isCompassEnabled({required int mapId}) async { + return (await _mapsPlatform + .channel(mapId) + .invokeMethod('map#isCompassEnabled'))!; } - Future isTrafficEnabled() async { - return await _channel.invokeMethod('map#isTrafficEnabled'); + @override + Future isLiteModeEnabled({required int mapId}) async { + return (await _mapsPlatform + .channel(mapId) + .invokeMethod('map#isLiteModeEnabled'))!; } - Future isBuildingsEnabled() async { - return await _channel.invokeMethod('map#isBuildingsEnabled'); + @override + Future isMapToolbarEnabled({required int mapId}) async { + return (await _mapsPlatform + .channel(mapId) + .invokeMethod('map#isMapToolbarEnabled'))!; } - Future takeSnapshot() async { - return await _channel.invokeMethod('map#takeSnapshot'); + @override + Future isMyLocationButtonEnabled({required int mapId}) async { + return (await _mapsPlatform + .channel(mapId) + .invokeMethod('map#isMyLocationButtonEnabled'))!; } - Future?> getTileOverlayInfo(String id) async { - return await _channel.invokeMapMethod( - 'map#getTileOverlayInfo', { - 'tileOverlayId': id, - }); + @override + Future isTrafficEnabled({required int mapId}) async { + return (await _mapsPlatform + .channel(mapId) + .invokeMethod('map#isTrafficEnabled'))!; } } diff --git a/packages/google_maps_flutter/google_maps_flutter/example/integration_test/google_maps_test.dart b/packages/google_maps_flutter/google_maps_flutter/example/integration_test/google_maps_test.dart index 8742ff31af42..d82a58227d8a 100644 --- a/packages/google_maps_flutter/google_maps_flutter/example/integration_test/google_maps_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter/example/integration_test/google_maps_test.dart @@ -10,6 +10,7 @@ import 'dart:ui' as ui; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; import 'package:integration_test/integration_test.dart'; import 'google_map_inspector.dart'; @@ -22,10 +23,19 @@ const CameraPosition _kInitialCameraPosition = void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + // TODO(stuartmorgan): Remove this once mobile implementations are federated + // and registering their own inpector implementations, and just call + // enableDebugInspection. + if (GoogleMapsFlutterPlatform.instance is MethodChannelGoogleMapsFlutter) { + GoogleMapsInspectorPlatform.instance = MethodChannelGoogleMapsInspector( + GoogleMapsFlutterPlatform.instance as MethodChannelGoogleMapsFlutter); + } else { + GoogleMapsFlutterPlatform.instance.enableDebugInspection(); + } + testWidgets('testCompassToggle', (WidgetTester tester) async { final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, child: GoogleMap( @@ -33,16 +43,15 @@ void main() { initialCameraPosition: _kInitialCameraPosition, compassEnabled: false, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; - bool? compassEnabled = await inspector.isCompassEnabled(); + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; + bool compassEnabled = await inspector.isCompassEnabled(mapId: mapId); expect(compassEnabled, false); await tester.pumpWidget(Directionality( @@ -57,14 +66,13 @@ void main() { ), )); - compassEnabled = await inspector.isCompassEnabled(); + compassEnabled = await inspector.isCompassEnabled(mapId: mapId); expect(compassEnabled, true); }); testWidgets('testMapToolbarToggle', (WidgetTester tester) async { final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, @@ -73,16 +81,15 @@ void main() { initialCameraPosition: _kInitialCameraPosition, mapToolbarEnabled: false, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; - bool? mapToolbarEnabled = await inspector.isMapToolbarEnabled(); + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; + bool mapToolbarEnabled = await inspector.isMapToolbarEnabled(mapId: mapId); expect(mapToolbarEnabled, false); await tester.pumpWidget(Directionality( @@ -97,7 +104,7 @@ void main() { ), )); - mapToolbarEnabled = await inspector.isMapToolbarEnabled(); + mapToolbarEnabled = await inspector.isMapToolbarEnabled(mapId: mapId); expect(mapToolbarEnabled, Platform.isAndroid); }); @@ -113,9 +120,8 @@ void main() { // // Thus we test iOS and Android a little differently here. final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); - late GoogleMapController controller; + final Completer controllerCompleter = + Completer(); const MinMaxZoomPreference initialZoomLevel = MinMaxZoomPreference(4, 8); const MinMaxZoomPreference finalZoomLevel = MinMaxZoomPreference(6, 10); @@ -127,30 +133,28 @@ void main() { initialCameraPosition: _kInitialCameraPosition, minMaxZoomPreference: initialZoomLevel, onMapCreated: (GoogleMapController c) async { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(c.channel!); - controller = c; - inspectorCompleter.complete(inspector); + controllerCompleter.complete(c); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; + final GoogleMapController controller = await controllerCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; if (Platform.isIOS) { final MinMaxZoomPreference zoomLevel = - await inspector.getMinMaxZoomLevels(); + await inspector.getMinMaxZoomLevels(mapId: controller.mapId); expect(zoomLevel, equals(initialZoomLevel)); } else if (Platform.isAndroid) { await controller.moveCamera(CameraUpdate.zoomTo(15)); await tester.pumpAndSettle(); - double? zoomLevel = await inspector.getZoomLevel(); + double? zoomLevel = await controller.getZoomLevel(); expect(zoomLevel, equals(initialZoomLevel.maxZoom)); await controller.moveCamera(CameraUpdate.zoomTo(1)); await tester.pumpAndSettle(); - zoomLevel = await inspector.getZoomLevel(); + zoomLevel = await controller.getZoomLevel(); expect(zoomLevel, equals(initialZoomLevel.minZoom)); } @@ -168,25 +172,24 @@ void main() { if (Platform.isIOS) { final MinMaxZoomPreference zoomLevel = - await inspector.getMinMaxZoomLevels(); + await inspector.getMinMaxZoomLevels(mapId: controller.mapId); expect(zoomLevel, equals(finalZoomLevel)); } else { await controller.moveCamera(CameraUpdate.zoomTo(15)); await tester.pumpAndSettle(); - double? zoomLevel = await inspector.getZoomLevel(); + double? zoomLevel = await controller.getZoomLevel(); expect(zoomLevel, equals(finalZoomLevel.maxZoom)); await controller.moveCamera(CameraUpdate.zoomTo(1)); await tester.pumpAndSettle(); - zoomLevel = await inspector.getZoomLevel(); + zoomLevel = await controller.getZoomLevel(); expect(zoomLevel, equals(finalZoomLevel.minZoom)); } }); testWidgets('testZoomGesturesEnabled', (WidgetTester tester) async { final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, @@ -195,16 +198,16 @@ void main() { initialCameraPosition: _kInitialCameraPosition, zoomGesturesEnabled: false, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; - bool? zoomGesturesEnabled = await inspector.isZoomGesturesEnabled(); + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; + bool zoomGesturesEnabled = + await inspector.areZoomGesturesEnabled(mapId: mapId); expect(zoomGesturesEnabled, false); await tester.pumpWidget(Directionality( @@ -219,14 +222,13 @@ void main() { ), )); - zoomGesturesEnabled = await inspector.isZoomGesturesEnabled(); + zoomGesturesEnabled = await inspector.areZoomGesturesEnabled(mapId: mapId); expect(zoomGesturesEnabled, true); }); testWidgets('testZoomControlsEnabled', (WidgetTester tester) async { final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, @@ -234,16 +236,16 @@ void main() { key: key, initialCameraPosition: _kInitialCameraPosition, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; - bool? zoomControlsEnabled = await inspector.isZoomControlsEnabled(); + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; + bool zoomControlsEnabled = + await inspector.areZoomControlsEnabled(mapId: mapId); expect(zoomControlsEnabled, !Platform.isIOS); /// Zoom Controls functionality is not available on iOS at the moment. @@ -260,15 +262,15 @@ void main() { ), )); - zoomControlsEnabled = await inspector.isZoomControlsEnabled(); + zoomControlsEnabled = + await inspector.areZoomControlsEnabled(mapId: mapId); expect(zoomControlsEnabled, false); } }); testWidgets('testLiteModeEnabled', (WidgetTester tester) async { final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, @@ -277,16 +279,15 @@ void main() { initialCameraPosition: _kInitialCameraPosition, liteModeEnabled: false, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; - bool? liteModeEnabled = await inspector.isLiteModeEnabled(); + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; + bool liteModeEnabled = await inspector.isLiteModeEnabled(mapId: mapId); expect(liteModeEnabled, false); await tester.pumpWidget(Directionality( @@ -301,14 +302,13 @@ void main() { ), )); - liteModeEnabled = await inspector.isLiteModeEnabled(); + liteModeEnabled = await inspector.isLiteModeEnabled(mapId: mapId); expect(liteModeEnabled, true); }, skip: !Platform.isAndroid); testWidgets('testRotateGesturesEnabled', (WidgetTester tester) async { final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, @@ -317,16 +317,16 @@ void main() { initialCameraPosition: _kInitialCameraPosition, rotateGesturesEnabled: false, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; - bool? rotateGesturesEnabled = await inspector.isRotateGesturesEnabled(); + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; + bool rotateGesturesEnabled = + await inspector.areRotateGesturesEnabled(mapId: mapId); expect(rotateGesturesEnabled, false); await tester.pumpWidget(Directionality( @@ -341,14 +341,14 @@ void main() { ), )); - rotateGesturesEnabled = await inspector.isRotateGesturesEnabled(); + rotateGesturesEnabled = + await inspector.areRotateGesturesEnabled(mapId: mapId); expect(rotateGesturesEnabled, true); }); testWidgets('testTiltGesturesEnabled', (WidgetTester tester) async { final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, @@ -357,16 +357,16 @@ void main() { initialCameraPosition: _kInitialCameraPosition, tiltGesturesEnabled: false, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; - bool? tiltGesturesEnabled = await inspector.isTiltGesturesEnabled(); + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; + bool tiltGesturesEnabled = + await inspector.areTiltGesturesEnabled(mapId: mapId); expect(tiltGesturesEnabled, false); await tester.pumpWidget(Directionality( @@ -381,14 +381,13 @@ void main() { ), )); - tiltGesturesEnabled = await inspector.isTiltGesturesEnabled(); + tiltGesturesEnabled = await inspector.areTiltGesturesEnabled(mapId: mapId); expect(tiltGesturesEnabled, true); }); testWidgets('testScrollGesturesEnabled', (WidgetTester tester) async { final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, @@ -397,16 +396,16 @@ void main() { initialCameraPosition: _kInitialCameraPosition, scrollGesturesEnabled: false, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; - bool? scrollGesturesEnabled = await inspector.isScrollGesturesEnabled(); + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; + bool scrollGesturesEnabled = + await inspector.areScrollGesturesEnabled(mapId: mapId); expect(scrollGesturesEnabled, false); await tester.pumpWidget(Directionality( @@ -421,7 +420,8 @@ void main() { ), )); - scrollGesturesEnabled = await inspector.isScrollGesturesEnabled(); + scrollGesturesEnabled = + await inspector.areScrollGesturesEnabled(mapId: mapId); expect(scrollGesturesEnabled, true); }); @@ -547,8 +547,7 @@ void main() { testWidgets('testTraffic', (WidgetTester tester) async { final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, @@ -557,16 +556,15 @@ void main() { initialCameraPosition: _kInitialCameraPosition, trafficEnabled: true, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; - bool? isTrafficEnabled = await inspector.isTrafficEnabled(); + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; + bool isTrafficEnabled = await inspector.isTrafficEnabled(mapId: mapId); expect(isTrafficEnabled, true); await tester.pumpWidget(Directionality( @@ -581,14 +579,13 @@ void main() { ), )); - isTrafficEnabled = await inspector.isTrafficEnabled(); + isTrafficEnabled = await inspector.isTrafficEnabled(mapId: mapId); expect(isTrafficEnabled, false); }); testWidgets('testBuildings', (WidgetTester tester) async { final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, @@ -597,24 +594,23 @@ void main() { initialCameraPosition: _kInitialCameraPosition, buildingsEnabled: true, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; - final bool? isBuildingsEnabled = await inspector.isBuildingsEnabled(); + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; + final bool isBuildingsEnabled = + await inspector.areBuildingsEnabled(mapId: mapId); expect(isBuildingsEnabled, true); }); // Location button tests are skipped in Android because we don't have location permission to test. testWidgets('testMyLocationButtonToggle', (WidgetTester tester) async { final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, @@ -624,16 +620,16 @@ void main() { myLocationButtonEnabled: true, myLocationEnabled: false, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; - bool? myLocationButtonEnabled = await inspector.isMyLocationButtonEnabled(); + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; + bool myLocationButtonEnabled = + await inspector.isMyLocationButtonEnabled(mapId: mapId); expect(myLocationButtonEnabled, true); await tester.pumpWidget(Directionality( @@ -649,15 +645,15 @@ void main() { ), )); - myLocationButtonEnabled = await inspector.isMyLocationButtonEnabled(); + myLocationButtonEnabled = + await inspector.isMyLocationButtonEnabled(mapId: mapId); expect(myLocationButtonEnabled, false); }, skip: Platform.isAndroid); testWidgets('testMyLocationButton initial value false', (WidgetTester tester) async { final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, @@ -667,25 +663,23 @@ void main() { myLocationButtonEnabled: false, myLocationEnabled: false, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; - final bool? myLocationButtonEnabled = - await inspector.isMyLocationButtonEnabled(); + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; + final bool myLocationButtonEnabled = + await inspector.isMyLocationButtonEnabled(mapId: mapId); expect(myLocationButtonEnabled, false); }, skip: Platform.isAndroid); testWidgets('testMyLocationButton initial value true', (WidgetTester tester) async { final Key key = GlobalKey(); - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); await tester.pumpWidget(Directionality( textDirection: TextDirection.ltr, @@ -695,17 +689,16 @@ void main() { myLocationButtonEnabled: true, myLocationEnabled: false, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), )); - final GoogleMapInspector inspector = await inspectorCompleter.future; - final bool? myLocationButtonEnabled = - await inspector.isMyLocationButtonEnabled(); + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; + final bool myLocationButtonEnabled = + await inspector.isMyLocationButtonEnabled(mapId: mapId); expect(myLocationButtonEnabled, true); }, skip: Platform.isAndroid); @@ -962,8 +955,8 @@ void main() { }); testWidgets('testTakeSnapshot', (WidgetTester tester) async { - final Completer inspectorCompleter = - Completer(); + final Completer controllerCompleter = + Completer(); await tester.pumpWidget( Directionality( @@ -971,10 +964,7 @@ void main() { child: GoogleMap( initialCameraPosition: _kInitialCameraPosition, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + controllerCompleter.complete(controller); }, ), ), @@ -982,8 +972,8 @@ void main() { await tester.pumpAndSettle(const Duration(seconds: 3)); - final GoogleMapInspector inspector = await inspectorCompleter.future; - final Uint8List? bytes = await inspector.takeSnapshot(); + final GoogleMapController controller = await controllerCompleter.future; + final Uint8List? bytes = await controller.takeSnapshot(); expect(bytes?.isNotEmpty, true); }, // TODO(cyanglaz): un-skip the test when we can test this on CI with API key enabled. @@ -993,8 +983,7 @@ void main() { testWidgets( 'set tileOverlay correctly', (WidgetTester tester) async { - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); final TileOverlay tileOverlay1 = TileOverlay( tileOverlayId: const TileOverlayId('tile_overlay_1'), tileProvider: _DebugTileProvider(), @@ -1019,42 +1008,40 @@ void main() { initialCameraPosition: _kInitialCameraPosition, tileOverlays: {tileOverlay1, tileOverlay2}, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), ), ); await tester.pumpAndSettle(const Duration(seconds: 3)); - final GoogleMapInspector inspector = await inspectorCompleter.future; + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; - final Map tileOverlayInfo1 = - (await inspector.getTileOverlayInfo('tile_overlay_1'))!; - final Map tileOverlayInfo2 = - (await inspector.getTileOverlayInfo('tile_overlay_2'))!; + final TileOverlay tileOverlayInfo1 = (await inspector + .getTileOverlayInfo(tileOverlay1.mapsId, mapId: mapId))!; + final TileOverlay tileOverlayInfo2 = (await inspector + .getTileOverlayInfo(tileOverlay2.mapsId, mapId: mapId))!; - expect(tileOverlayInfo1['visible'], isTrue); - expect(tileOverlayInfo1['fadeIn'], isTrue); - expect(tileOverlayInfo1['transparency'], - moreOrLessEquals(0.2, epsilon: 0.001)); - expect(tileOverlayInfo1['zIndex'], 2); + expect(tileOverlayInfo1.visible, isTrue); + expect(tileOverlayInfo1.fadeIn, isTrue); + expect( + tileOverlayInfo1.transparency, moreOrLessEquals(0.2, epsilon: 0.001)); + expect(tileOverlayInfo1.zIndex, 2); - expect(tileOverlayInfo2['visible'], isFalse); - expect(tileOverlayInfo2['fadeIn'], isFalse); - expect(tileOverlayInfo2['transparency'], - moreOrLessEquals(0.3, epsilon: 0.001)); - expect(tileOverlayInfo2['zIndex'], 1); + expect(tileOverlayInfo2.visible, isFalse); + expect(tileOverlayInfo2.fadeIn, isFalse); + expect( + tileOverlayInfo2.transparency, moreOrLessEquals(0.3, epsilon: 0.001)); + expect(tileOverlayInfo2.zIndex, 1); }, ); testWidgets( 'update tileOverlays correctly', (WidgetTester tester) async { - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); final Key key = GlobalKey(); final TileOverlay tileOverlay1 = TileOverlay( tileOverlayId: const TileOverlayId('tile_overlay_1'), @@ -1081,16 +1068,15 @@ void main() { initialCameraPosition: _kInitialCameraPosition, tileOverlays: {tileOverlay1, tileOverlay2}, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), ), ); - final GoogleMapInspector inspector = await inspectorCompleter.future; + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; final TileOverlay tileOverlay1New = TileOverlay( tileOverlayId: const TileOverlayId('tile_overlay_1'), @@ -1117,16 +1103,16 @@ void main() { await tester.pumpAndSettle(const Duration(seconds: 3)); - final Map tileOverlayInfo1 = - (await inspector.getTileOverlayInfo('tile_overlay_1'))!; - final Map? tileOverlayInfo2 = - await inspector.getTileOverlayInfo('tile_overlay_2'); + final TileOverlay tileOverlayInfo1 = (await inspector + .getTileOverlayInfo(tileOverlay1.mapsId, mapId: mapId))!; + final TileOverlay? tileOverlayInfo2 = + await inspector.getTileOverlayInfo(tileOverlay2.mapsId, mapId: mapId); - expect(tileOverlayInfo1['visible'], isFalse); - expect(tileOverlayInfo1['fadeIn'], isFalse); - expect(tileOverlayInfo1['transparency'], - moreOrLessEquals(0.3, epsilon: 0.001)); - expect(tileOverlayInfo1['zIndex'], 1); + expect(tileOverlayInfo1.visible, isFalse); + expect(tileOverlayInfo1.fadeIn, isFalse); + expect( + tileOverlayInfo1.transparency, moreOrLessEquals(0.3, epsilon: 0.001)); + expect(tileOverlayInfo1.zIndex, 1); expect(tileOverlayInfo2, isNull); }, @@ -1135,8 +1121,7 @@ void main() { testWidgets( 'remove tileOverlays correctly', (WidgetTester tester) async { - final Completer inspectorCompleter = - Completer(); + final Completer mapIdCompleter = Completer(); final Key key = GlobalKey(); final TileOverlay tileOverlay1 = TileOverlay( tileOverlayId: const TileOverlayId('tile_overlay_1'), @@ -1155,16 +1140,15 @@ void main() { initialCameraPosition: _kInitialCameraPosition, tileOverlays: {tileOverlay1}, onMapCreated: (GoogleMapController controller) { - final GoogleMapInspector inspector = - // ignore: invalid_use_of_visible_for_testing_member - GoogleMapInspector(controller.channel!); - inspectorCompleter.complete(inspector); + mapIdCompleter.complete(controller.mapId); }, ), ), ); - final GoogleMapInspector inspector = await inspectorCompleter.future; + final int mapId = await mapIdCompleter.future; + final GoogleMapsInspectorPlatform inspector = + GoogleMapsInspectorPlatform.instance!; await tester.pumpWidget( Directionality( @@ -1180,8 +1164,8 @@ void main() { ); await tester.pumpAndSettle(const Duration(seconds: 3)); - final Map? tileOverlayInfo1 = - await inspector.getTileOverlayInfo('tile_overlay_1'); + final TileOverlay? tileOverlayInfo1 = + await inspector.getTileOverlayInfo(tileOverlay1.mapsId, mapId: mapId); expect(tileOverlayInfo1, isNull); }, diff --git a/packages/google_maps_flutter/google_maps_flutter/lib/google_maps_flutter.dart b/packages/google_maps_flutter/google_maps_flutter/lib/google_maps_flutter.dart index 4eeb8572413c..751930aece67 100644 --- a/packages/google_maps_flutter/google_maps_flutter/lib/google_maps_flutter.dart +++ b/packages/google_maps_flutter/google_maps_flutter/lib/google_maps_flutter.dart @@ -13,7 +13,6 @@ import 'dart:typed_data'; import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart'; export 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart' 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 71b1434eb293..cd3d0781e471 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 @@ -35,20 +35,6 @@ class GoogleMapController { ); } - /// Used to communicate with the native platform. - /// - /// Accessible only for testing. - // TODO(dit): Remove this getter, https://github.com/flutter/flutter/issues/55504. - @visibleForTesting - MethodChannel? get channel { - if (GoogleMapsFlutterPlatform.instance is MethodChannelGoogleMapsFlutter) { - return (GoogleMapsFlutterPlatform.instance - as MethodChannelGoogleMapsFlutter) - .channel(mapId); - } - return null; - } - final _GoogleMapState _googleMapState; void _connectStreams(int mapId) { diff --git a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml index 1a0dd4ebfc6f..f546c8af151a 100644 --- a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter description: A Flutter plugin for integrating Google Maps in iOS and Android applications. repository: https://github.com/flutter/plugins/tree/main/packages/google_maps_flutter/google_maps_flutter issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.1.8 +version: 2.1.9 environment: sdk: ">=2.14.0 <3.0.0" @@ -21,7 +21,7 @@ dependencies: flutter: sdk: flutter flutter_plugin_android_lifecycle: ^2.0.1 - google_maps_flutter_platform_interface: ^2.2.0 + google_maps_flutter_platform_interface: ^2.2.1 dev_dependencies: flutter_test: