From 6a486c771361959b5bb7edf1b7aa89f432a568d8 Mon Sep 17 00:00:00 2001 From: balvinderz Date: Thu, 29 Oct 2020 12:33:42 +0530 Subject: [PATCH 1/7] show only single infoWindow --- .../google_maps_flutter_web/CHANGELOG.md | 4 +++ .../lib/src/markers.dart | 6 +++-- .../google_maps_flutter_web/pubspec.yaml | 2 +- .../test/test_driver/markers_integration.dart | 27 +++++++++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md index e4918ab1d5ca..50d86e9f3bc4 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.0+6 + +* Show only single infoWindow + ## 0.1.0+5 * Update `package:google_maps` to `^3.4.5`. diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart index a0428adcdc2e..ca2960c9a050 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart @@ -100,13 +100,15 @@ class MarkersController extends GeometryController { } // InfoWindow... + MarkerController _markerController; /// Shows the [InfoWindow] of a [MarkerId]. /// /// See also [hideMarkerInfoWindow] and [isInfoWindowShown]. void showMarkerInfoWindow(MarkerId markerId) { - MarkerController markerController = _markerIdToController[markerId]; - markerController?.showInfoWindow(); + _markerController?.hideInfoWindow(); + _markerController = _markerIdToController[markerId]; + _markerController?.showInfoWindow(); } /// Hides the [InfoWindow] of a [MarkerId]. diff --git a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml index a44d5c185c1f..9f88ff16ea4c 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml @@ -1,7 +1,7 @@ name: google_maps_flutter_web description: Web platform implementation of google_maps_flutter homepage: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter -version: 0.1.0+5 +version: 0.1.0+6 flutter: plugin: diff --git a/packages/google_maps_flutter/google_maps_flutter_web/test/test_driver/markers_integration.dart b/packages/google_maps_flutter/google_maps_flutter_web/test/test_driver/markers_integration.dart index a813ff86188e..5141de69d327 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/test/test_driver/markers_integration.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/test/test_driver/markers_integration.dart @@ -100,6 +100,33 @@ void main() { expect(controller.markers[MarkerId('1')].infoWindowShown, isFalse); }); + testWidgets('only single InfoWindow is visible', + (WidgetTester tester) async { + final markers = { + Marker( + markerId: MarkerId('1'), + infoWindow: InfoWindow(title: "Title", snippet: "Snippet"), + ), + Marker( + markerId: MarkerId('2'), + infoWindow: InfoWindow(title: "Title", snippet: "Snippet"), + ), + }; + controller.addMarkers(markers); + + expect(controller.markers[MarkerId('1')].infoWindowShown, isFalse); + + controller.showMarkerInfoWindow(MarkerId('1')); + + expect(controller.markers[MarkerId('1')].infoWindowShown, isTrue); + + controller.showMarkerInfoWindow(MarkerId('2')); + + expect(controller.markers[MarkerId('2')].infoWindowShown, isTrue); + + expect(controller.markers[MarkerId('1')].infoWindowShown, isFalse); + }); + // https://github.com/flutter/flutter/issues/64938 testWidgets('markers with icon:null work', (WidgetTester tester) async { final markers = { From a7e264a1c9361b51c9625c4d4a06fd620b24441f Mon Sep 17 00:00:00 2001 From: balvinderz Date: Fri, 30 Oct 2020 00:01:25 +0530 Subject: [PATCH 2/7] review changes --- .../google_maps_flutter_web/lib/src/markers.dart | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart index ca2960c9a050..4a5867e79e8b 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart @@ -106,9 +106,9 @@ class MarkersController extends GeometryController { /// /// See also [hideMarkerInfoWindow] and [isInfoWindowShown]. void showMarkerInfoWindow(MarkerId markerId) { - _markerController?.hideInfoWindow(); - _markerController = _markerIdToController[markerId]; - _markerController?.showInfoWindow(); + _hideAllMarkerInfoWindow(); + MarkerController markerController = _markerIdToController[markerId]; + markerController?.showInfoWindow(); } /// Hides the [InfoWindow] of a [MarkerId]. @@ -147,4 +147,10 @@ class MarkersController extends GeometryController { markerId, )); } + + void _hideAllMarkerInfoWindow() { + _markerIdToController.values + .where((controller) => controller?.infoWindowShown) + .forEach((controller) => controller.hideInfoWindow()); + } } From a9df18a6c9d5b4d7695bd85fb1f21d46b3007e7c Mon Sep 17 00:00:00 2001 From: balvinderz Date: Fri, 30 Oct 2020 00:16:05 +0530 Subject: [PATCH 3/7] fix for loop --- .../google_maps_flutter_web/lib/src/markers.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart index 4a5867e79e8b..6c2b1b7e5441 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart @@ -150,7 +150,7 @@ class MarkersController extends GeometryController { void _hideAllMarkerInfoWindow() { _markerIdToController.values - .where((controller) => controller?.infoWindowShown) + .where((controller) => controller == null ? false : controller.infoWindowShown) .forEach((controller) => controller.hideInfoWindow()); } } From 28a76a12b792a48eaedcd119e97b17025db72747 Mon Sep 17 00:00:00 2001 From: balvinderz Date: Fri, 30 Oct 2020 00:19:07 +0530 Subject: [PATCH 4/7] dartfmt --- .../google_maps_flutter_web/lib/src/markers.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart index 6c2b1b7e5441..e02216da078c 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart @@ -150,7 +150,8 @@ class MarkersController extends GeometryController { void _hideAllMarkerInfoWindow() { _markerIdToController.values - .where((controller) => controller == null ? false : controller.infoWindowShown) + .where((controller) => + controller == null ? false : controller.infoWindowShown) .forEach((controller) => controller.hideInfoWindow()); } } From a684e192c4676203773d36942a8224b5145454dd Mon Sep 17 00:00:00 2001 From: balvinderz Date: Fri, 30 Oct 2020 00:33:34 +0530 Subject: [PATCH 5/7] fix analyze --- .../google_maps_flutter_web/lib/src/markers.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart index e02216da078c..fea6164515b8 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart @@ -100,7 +100,6 @@ class MarkersController extends GeometryController { } // InfoWindow... - MarkerController _markerController; /// Shows the [InfoWindow] of a [MarkerId]. /// From 94ee44701e80e63ea82af54d08719cad2d68843c Mon Sep 17 00:00:00 2001 From: David Iglesias Date: Thu, 29 Oct 2020 14:39:49 -0700 Subject: [PATCH 6/7] Update markers_integration.dart --- .../test/test_driver/markers_integration.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_web/test/test_driver/markers_integration.dart b/packages/google_maps_flutter/google_maps_flutter_web/test/test_driver/markers_integration.dart index 5141de69d327..cad8cd8acfed 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/test/test_driver/markers_integration.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/test/test_driver/markers_integration.dart @@ -100,6 +100,7 @@ void main() { expect(controller.markers[MarkerId('1')].infoWindowShown, isFalse); }); + // https://github.com/flutter/flutter/issues/67380 testWidgets('only single InfoWindow is visible', (WidgetTester tester) async { final markers = { @@ -115,16 +116,17 @@ void main() { controller.addMarkers(markers); expect(controller.markers[MarkerId('1')].infoWindowShown, isFalse); + expect(controller.markers[MarkerId('2')].infoWindowShown, isFalse); controller.showMarkerInfoWindow(MarkerId('1')); expect(controller.markers[MarkerId('1')].infoWindowShown, isTrue); + expect(controller.markers[MarkerId('2')].infoWindowShown, isFalse); controller.showMarkerInfoWindow(MarkerId('2')); - expect(controller.markers[MarkerId('2')].infoWindowShown, isTrue); - expect(controller.markers[MarkerId('1')].infoWindowShown, isFalse); + expect(controller.markers[MarkerId('2')].infoWindowShown, isTrue); }); // https://github.com/flutter/flutter/issues/64938 From f20ca87d13eaf575bf6e936b7511e2428896f204 Mon Sep 17 00:00:00 2001 From: David Iglesias Date: Thu, 29 Oct 2020 14:41:35 -0700 Subject: [PATCH 7/7] Update CHANGELOG.md --- .../google_maps_flutter/google_maps_flutter_web/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md index 50d86e9f3bc4..9307affdf945 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.1.0+6 -* Show only single infoWindow +* Ensure a single `InfoWindow` is shown at a time. [Issue](https://github.com/flutter/flutter/issues/67380). ## 0.1.0+5