[google_maps_flutter] Use an interface for test inspection (#6116)
diff --git a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md
index 84f7867..bf7a705 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 fe3461b..95ca969 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';
+import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.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);
+/// 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 MethodChannel _channel;
+ final MethodChannelGoogleMapsFlutter _mapsPlatform;
- Future<bool?> isCompassEnabled() async {
- return await _channel.invokeMethod<bool>('map#isCompassEnabled');
+ @override
+ Future<bool> areBuildingsEnabled({required int mapId}) async {
+ return (await _mapsPlatform
+ .channel(mapId)
+ .invokeMethod<bool>('map#isBuildingsEnabled'))!;
}
- Future<bool?> isMapToolbarEnabled() async {
- return await _channel.invokeMethod<bool>('map#isMapToolbarEnabled');
+ @override
+ Future<bool> areRotateGesturesEnabled({required int mapId}) async {
+ return (await _mapsPlatform
+ .channel(mapId)
+ .invokeMethod<bool>('map#isRotateGesturesEnabled'))!;
}
- Future<MinMaxZoomPreference> getMinMaxZoomLevels() async {
- final List<double> zoomLevels =
- (await _channel.invokeMethod<List<dynamic>>('map#getMinMaxZoomLevels'))!
- .cast<double>();
+ @override
+ Future<bool> areScrollGesturesEnabled({required int mapId}) async {
+ return (await _mapsPlatform
+ .channel(mapId)
+ .invokeMethod<bool>('map#isScrollGesturesEnabled'))!;
+ }
+
+ @override
+ Future<bool> areTiltGesturesEnabled({required int mapId}) async {
+ return (await _mapsPlatform
+ .channel(mapId)
+ .invokeMethod<bool>('map#isTiltGesturesEnabled'))!;
+ }
+
+ @override
+ Future<bool> areZoomControlsEnabled({required int mapId}) async {
+ return (await _mapsPlatform
+ .channel(mapId)
+ .invokeMethod<bool>('map#isZoomControlsEnabled'))!;
+ }
+
+ @override
+ Future<bool> areZoomGesturesEnabled({required int mapId}) async {
+ return (await _mapsPlatform
+ .channel(mapId)
+ .invokeMethod<bool>('map#isZoomGesturesEnabled'))!;
+ }
+
+ @override
+ Future<MinMaxZoomPreference> getMinMaxZoomLevels({required int mapId}) async {
+ final List<double> zoomLevels = (await _mapsPlatform
+ .channel(mapId)
+ .invokeMethod<List<dynamic>>('map#getMinMaxZoomLevels'))!
+ .cast<double>();
return MinMaxZoomPreference(zoomLevels[0], zoomLevels[1]);
}
- Future<double?> getZoomLevel() async {
- final double? zoomLevel =
- await _channel.invokeMethod<double>('map#getZoomLevel');
- return zoomLevel;
- }
-
- Future<bool?> isZoomGesturesEnabled() async {
- return await _channel.invokeMethod<bool>('map#isZoomGesturesEnabled');
- }
-
- Future<bool?> isZoomControlsEnabled() async {
- return await _channel.invokeMethod<bool>('map#isZoomControlsEnabled');
- }
-
- Future<bool?> isLiteModeEnabled() async {
- return await _channel.invokeMethod<bool>('map#isLiteModeEnabled');
- }
-
- Future<bool?> isRotateGesturesEnabled() async {
- return await _channel.invokeMethod<bool>('map#isRotateGesturesEnabled');
- }
-
- Future<bool?> isTiltGesturesEnabled() async {
- return await _channel.invokeMethod<bool>('map#isTiltGesturesEnabled');
- }
-
- Future<bool?> isScrollGesturesEnabled() async {
- return await _channel.invokeMethod<bool>('map#isScrollGesturesEnabled');
- }
-
- Future<bool?> isMyLocationButtonEnabled() async {
- return await _channel.invokeMethod<bool>('map#isMyLocationButtonEnabled');
- }
-
- Future<bool?> isTrafficEnabled() async {
- return await _channel.invokeMethod<bool>('map#isTrafficEnabled');
- }
-
- Future<bool?> isBuildingsEnabled() async {
- return await _channel.invokeMethod<bool>('map#isBuildingsEnabled');
- }
-
- Future<Uint8List?> takeSnapshot() async {
- return await _channel.invokeMethod<Uint8List>('map#takeSnapshot');
- }
-
- Future<Map<String, dynamic>?> getTileOverlayInfo(String id) async {
- return await _channel.invokeMapMethod<String, dynamic>(
- 'map#getTileOverlayInfo', <String, String>{
- 'tileOverlayId': id,
+ @override
+ Future<TileOverlay?> getTileOverlayInfo(TileOverlayId tileOverlayId,
+ {required int mapId}) async {
+ final Map<String, Object?>? tileInfo = await _mapsPlatform
+ .channel(mapId)
+ .invokeMapMethod<String, dynamic>(
+ 'map#getTileOverlayInfo', <String, String>{
+ '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(),
+ );
+ }
+
+ @override
+ Future<bool> isCompassEnabled({required int mapId}) async {
+ return (await _mapsPlatform
+ .channel(mapId)
+ .invokeMethod<bool>('map#isCompassEnabled'))!;
+ }
+
+ @override
+ Future<bool> isLiteModeEnabled({required int mapId}) async {
+ return (await _mapsPlatform
+ .channel(mapId)
+ .invokeMethod<bool>('map#isLiteModeEnabled'))!;
+ }
+
+ @override
+ Future<bool> isMapToolbarEnabled({required int mapId}) async {
+ return (await _mapsPlatform
+ .channel(mapId)
+ .invokeMethod<bool>('map#isMapToolbarEnabled'))!;
+ }
+
+ @override
+ Future<bool> isMyLocationButtonEnabled({required int mapId}) async {
+ return (await _mapsPlatform
+ .channel(mapId)
+ .invokeMethod<bool>('map#isMyLocationButtonEnabled'))!;
+ }
+
+ @override
+ Future<bool> isTrafficEnabled({required int mapId}) async {
+ return (await _mapsPlatform
+ .channel(mapId)
+ .invokeMethod<bool>('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 8742ff3..d82a582 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 '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 @@
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<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
child: GoogleMap(
@@ -33,16 +43,15 @@
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 @@
),
));
- compassEnabled = await inspector.isCompassEnabled();
+ compassEnabled = await inspector.isCompassEnabled(mapId: mapId);
expect(compassEnabled, true);
});
testWidgets('testMapToolbarToggle', (WidgetTester tester) async {
final Key key = GlobalKey();
- final Completer<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
@@ -73,16 +81,15 @@
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 @@
),
));
- mapToolbarEnabled = await inspector.isMapToolbarEnabled();
+ mapToolbarEnabled = await inspector.isMapToolbarEnabled(mapId: mapId);
expect(mapToolbarEnabled, Platform.isAndroid);
});
@@ -113,9 +120,8 @@
//
// Thus we test iOS and Android a little differently here.
final Key key = GlobalKey();
- final Completer<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
- late GoogleMapController controller;
+ final Completer<GoogleMapController> controllerCompleter =
+ Completer<GoogleMapController>();
const MinMaxZoomPreference initialZoomLevel = MinMaxZoomPreference(4, 8);
const MinMaxZoomPreference finalZoomLevel = MinMaxZoomPreference(6, 10);
@@ -127,30 +133,28 @@
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 @@
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<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
@@ -195,16 +198,16 @@
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 @@
),
));
- zoomGesturesEnabled = await inspector.isZoomGesturesEnabled();
+ zoomGesturesEnabled = await inspector.areZoomGesturesEnabled(mapId: mapId);
expect(zoomGesturesEnabled, true);
});
testWidgets('testZoomControlsEnabled', (WidgetTester tester) async {
final Key key = GlobalKey();
- final Completer<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
@@ -234,16 +236,16 @@
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 @@
),
));
- zoomControlsEnabled = await inspector.isZoomControlsEnabled();
+ zoomControlsEnabled =
+ await inspector.areZoomControlsEnabled(mapId: mapId);
expect(zoomControlsEnabled, false);
}
});
testWidgets('testLiteModeEnabled', (WidgetTester tester) async {
final Key key = GlobalKey();
- final Completer<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
@@ -277,16 +279,15 @@
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 @@
),
));
- 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<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
@@ -317,16 +317,16 @@
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 @@
),
));
- rotateGesturesEnabled = await inspector.isRotateGesturesEnabled();
+ rotateGesturesEnabled =
+ await inspector.areRotateGesturesEnabled(mapId: mapId);
expect(rotateGesturesEnabled, true);
});
testWidgets('testTiltGesturesEnabled', (WidgetTester tester) async {
final Key key = GlobalKey();
- final Completer<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
@@ -357,16 +357,16 @@
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 @@
),
));
- tiltGesturesEnabled = await inspector.isTiltGesturesEnabled();
+ tiltGesturesEnabled = await inspector.areTiltGesturesEnabled(mapId: mapId);
expect(tiltGesturesEnabled, true);
});
testWidgets('testScrollGesturesEnabled', (WidgetTester tester) async {
final Key key = GlobalKey();
- final Completer<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
@@ -397,16 +396,16 @@
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 @@
),
));
- scrollGesturesEnabled = await inspector.isScrollGesturesEnabled();
+ scrollGesturesEnabled =
+ await inspector.areScrollGesturesEnabled(mapId: mapId);
expect(scrollGesturesEnabled, true);
});
@@ -547,8 +547,7 @@
testWidgets('testTraffic', (WidgetTester tester) async {
final Key key = GlobalKey();
- final Completer<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
@@ -557,16 +556,15 @@
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 @@
),
));
- isTrafficEnabled = await inspector.isTrafficEnabled();
+ isTrafficEnabled = await inspector.isTrafficEnabled(mapId: mapId);
expect(isTrafficEnabled, false);
});
testWidgets('testBuildings', (WidgetTester tester) async {
final Key key = GlobalKey();
- final Completer<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
@@ -597,24 +594,23 @@
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<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
@@ -624,16 +620,16 @@
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 @@
),
));
- 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<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
@@ -667,25 +663,23 @@
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<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
@@ -695,17 +689,16 @@
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 @@
});
testWidgets('testTakeSnapshot', (WidgetTester tester) async {
- final Completer<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<GoogleMapController> controllerCompleter =
+ Completer<GoogleMapController>();
await tester.pumpWidget(
Directionality(
@@ -971,10 +964,7 @@
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 @@
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 @@
testWidgets(
'set tileOverlay correctly',
(WidgetTester tester) async {
- final Completer<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
final TileOverlay tileOverlay1 = TileOverlay(
tileOverlayId: const TileOverlayId('tile_overlay_1'),
tileProvider: _DebugTileProvider(),
@@ -1019,42 +1008,40 @@
initialCameraPosition: _kInitialCameraPosition,
tileOverlays: <TileOverlay>{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<String, dynamic> tileOverlayInfo1 =
- (await inspector.getTileOverlayInfo('tile_overlay_1'))!;
- final Map<String, dynamic> 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<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
final Key key = GlobalKey();
final TileOverlay tileOverlay1 = TileOverlay(
tileOverlayId: const TileOverlayId('tile_overlay_1'),
@@ -1081,16 +1068,15 @@
initialCameraPosition: _kInitialCameraPosition,
tileOverlays: <TileOverlay>{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 @@
await tester.pumpAndSettle(const Duration(seconds: 3));
- final Map<String, dynamic> tileOverlayInfo1 =
- (await inspector.getTileOverlayInfo('tile_overlay_1'))!;
- final Map<String, dynamic>? 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 @@
testWidgets(
'remove tileOverlays correctly',
(WidgetTester tester) async {
- final Completer<GoogleMapInspector> inspectorCompleter =
- Completer<GoogleMapInspector>();
+ final Completer<int> mapIdCompleter = Completer<int>();
final Key key = GlobalKey();
final TileOverlay tileOverlay1 = TileOverlay(
tileOverlayId: const TileOverlayId('tile_overlay_1'),
@@ -1155,16 +1140,15 @@
initialCameraPosition: _kInitialCameraPosition,
tileOverlays: <TileOverlay>{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 @@
);
await tester.pumpAndSettle(const Duration(seconds: 3));
- final Map<String, dynamic>? 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 4eeb857..751930a 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 '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 71b1434..cd3d078 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 @@
);
}
- /// 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 1a0dd4e..f546c8a 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 @@
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 @@
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: