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 0a712b44eba..077d012e5b8 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,7 @@ -## NEXT +## 0.4.0+8 * Updates minimum Flutter version to 3.3. +* Allows marker position updates. Issue [#83467](https://github.com/flutter/flutter/issues/83467). ## 0.4.0+7 diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/marker_test.dart b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/marker_test.dart index 6591b0ca08d..2e2d77b71de 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/marker_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/marker_test.dart @@ -100,13 +100,16 @@ void main() { testWidgets('update', (WidgetTester tester) async { final MarkerController controller = MarkerController(marker: marker); final gmaps.MarkerOptions options = gmaps.MarkerOptions() - ..draggable = true; + ..draggable = true + ..position = gmaps.LatLng(42, 54); expect(marker.draggable, isNull); controller.update(options); expect(marker.draggable, isTrue); + expect(marker.position?.lat, equals(42)); + expect(marker.position?.lng, equals(54)); }); testWidgets('infoWindow null, showInfoWindow.', diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/markers_test.dart b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/markers_test.dart index e4c4dd7c0cf..6a264064a3c 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/markers_test.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/markers_test.dart @@ -47,23 +47,86 @@ void main() { }); testWidgets('changeMarkers', (WidgetTester tester) async { + gmaps.Marker? marker; + gmaps.LatLng? position; + final Set markers = { const Marker(markerId: MarkerId('1')), }; controller.addMarkers(markers); - expect( - controller.markers[const MarkerId('1')]?.marker?.draggable, isFalse); + marker = controller.markers[const MarkerId('1')]?.marker; + expect(marker, isNotNull); + expect(marker!.draggable, isFalse); - // Update the marker with radius 10 + // By default, markers fall in LatLng(0, 0) + position = marker.position; + expect(position, isNotNull); + expect(position!.lat, equals(0)); + expect(position.lng, equals(0)); + + // Update the marker with draggable and position final Set updatedMarkers = { - const Marker(markerId: MarkerId('1'), draggable: true), + const Marker( + markerId: MarkerId('1'), + draggable: true, + position: LatLng(42, 54), + ), }; controller.changeMarkers(updatedMarkers); + expect(controller.markers.length, 1); + + marker = controller.markers[const MarkerId('1')]?.marker; + expect(marker, isNotNull); + expect(marker!.draggable, isTrue); + + position = marker.position; + expect(position, isNotNull); + expect(position!.lat, equals(42)); + expect(position.lng, equals(54)); + }); + + testWidgets( + 'changeMarkers resets marker position if not passed when updating!', + (WidgetTester tester) async { + gmaps.Marker? marker; + gmaps.LatLng? position; + + final Set markers = { + const Marker( + markerId: MarkerId('1'), + position: LatLng(42, 54), + ), + }; + controller.addMarkers(markers); + marker = controller.markers[const MarkerId('1')]?.marker; + expect(marker, isNotNull); + expect(marker!.draggable, isFalse); + + position = marker.position; + expect(position, isNotNull); + expect(position!.lat, equals(42)); + expect(position.lng, equals(54)); + + // Update the marker without position + final Set updatedMarkers = { + const Marker( + markerId: MarkerId('1'), + draggable: true, + ), + }; + controller.changeMarkers(updatedMarkers); expect(controller.markers.length, 1); - expect( - controller.markers[const MarkerId('1')]?.marker?.draggable, isTrue); + + marker = controller.markers[const MarkerId('1')]?.marker; + expect(marker, isNotNull); + expect(marker!.draggable, isTrue); + + position = marker.position; + expect(position, isNotNull); + expect(position!.lat, equals(0)); + expect(position.lng, equals(0)); }); testWidgets('removeMarkers', (WidgetTester tester) async { diff --git a/packages/google_maps_flutter/google_maps_flutter_web/example/regen_mocks.sh b/packages/google_maps_flutter/google_maps_flutter_web/example/regen_mocks.sh index 78bcdc0f9e2..b3dc17c12c2 100755 --- a/packages/google_maps_flutter/google_maps_flutter_web/example/regen_mocks.sh +++ b/packages/google_maps_flutter/google_maps_flutter_web/example/regen_mocks.sh @@ -7,4 +7,4 @@ flutter pub get echo "(Re)generating mocks." -flutter pub run build_runner build --delete-conflicting-outputs +dart run build_runner build --delete-conflicting-outputs diff --git a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart index 25cba849475..dcce8d35699 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart +++ b/packages/google_maps_flutter/google_maps_flutter_web/lib/src/convert.dart @@ -290,17 +290,15 @@ gmaps.Icon? _gmIconFromBitmapDescriptor(BitmapDescriptor bitmapDescriptor) { // Computes the options for a new [gmaps.Marker] from an incoming set of options // [marker], and the existing marker registered with the map: [currentMarker]. -// Preserves the position from the [currentMarker], if set. gmaps.MarkerOptions _markerOptionsFromMarker( Marker marker, gmaps.Marker? currentMarker, ) { return gmaps.MarkerOptions() - ..position = currentMarker?.position ?? - gmaps.LatLng( - marker.position.latitude, - marker.position.longitude, - ) + ..position = gmaps.LatLng( + marker.position.latitude, + marker.position.longitude, + ) ..title = sanitizeHtml(marker.infoWindow.title ?? '') ..zIndex = marker.zIndex ..visible = marker.visible 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 83f4971a268..67df16f0016 100644 --- a/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter_web description: Web platform implementation of google_maps_flutter repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 0.4.0+7 +version: 0.4.0+8 environment: sdk: ">=2.18.0 <4.0.0"