From e2dde586a031fc7456fb35e3e004fdc26737eb8f Mon Sep 17 00:00:00 2001 From: Klaus <36441457+KlausJokinen@users.noreply.github.com> Date: Wed, 27 Mar 2019 11:20:02 +0200 Subject: [PATCH 1/3] [google_maps] fix markersToChange to actually change modified markers --- .../google_maps_flutter/lib/src/marker.dart | 38 +++++++++++++++---- .../lib/src/marker_updates.dart | 10 +++-- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/packages/google_maps_flutter/lib/src/marker.dart b/packages/google_maps_flutter/lib/src/marker.dart index cd39f689422d..a6a719001e86 100644 --- a/packages/google_maps_flutter/lib/src/marker.dart +++ b/packages/google_maps_flutter/lib/src/marker.dart @@ -274,15 +274,39 @@ class Marker { } @override - bool operator ==(Object other) { - if (identical(this, other)) return true; - if (other.runtimeType != runtimeType) return false; - final Marker typedOther = other; - return markerId == typedOther.markerId; - } + bool operator ==(Object other) => + identical(this, other) || + other is Marker && + runtimeType == other.runtimeType && + markerId == other.markerId && + alpha == other.alpha && + anchor == other.anchor && + consumeTapEvents == other.consumeTapEvents && + draggable == other.draggable && + flat == other.flat && + icon == other.icon && + infoWindow == other.infoWindow && + position == other.position && + rotation == other.rotation && + visible == other.visible && + zIndex == other.zIndex && + onTap == other.onTap; @override - int get hashCode => markerId.hashCode; + int get hashCode => + markerId.hashCode ^ + alpha.hashCode ^ + anchor.hashCode ^ + consumeTapEvents.hashCode ^ + draggable.hashCode ^ + flat.hashCode ^ + icon.hashCode ^ + infoWindow.hashCode ^ + position.hashCode ^ + rotation.hashCode ^ + visible.hashCode ^ + zIndex.hashCode ^ + onTap.hashCode; @override String toString() { diff --git a/packages/google_maps_flutter/lib/src/marker_updates.dart b/packages/google_maps_flutter/lib/src/marker_updates.dart index 6c73b5e6a12d..813eefea3c74 100644 --- a/packages/google_maps_flutter/lib/src/marker_updates.dart +++ b/packages/google_maps_flutter/lib/src/marker_updates.dart @@ -24,6 +24,10 @@ class _MarkerUpdates { final Set prevMarkerIds = previousMarkers.keys.toSet(); final Set currentMarkerIds = currentMarkers.keys.toSet(); + final Set previousMarkersSet = + Set.of(previousMarkers.values); + final Set currentMarkersSet = Set.of(currentMarkers.values); + Marker idToCurrentMarker(MarkerId id) { return currentMarkers[id]; } @@ -36,10 +40,8 @@ class _MarkerUpdates { .map(idToCurrentMarker) .toSet(); - final Set _markersToChange = currentMarkerIds - .intersection(prevMarkerIds) - .map(idToCurrentMarker) - .toSet(); + final Set _markersToChange = + currentMarkersSet.difference(previousMarkersSet); markersToAdd = _markersToAdd; markerIdsToRemove = _markerIdsToRemove; From 7cb1014993837d7f0a4023556b2f8dd0b4109a27 Mon Sep 17 00:00:00 2001 From: Klaus Jokinen <36441457+KlausJokinen@users.noreply.github.com> Date: Sun, 28 Jul 2019 19:39:15 +0300 Subject: [PATCH 2/3] Change hashCode to use hashValues --- .../google_maps_flutter/lib/src/marker.dart | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/packages/google_maps_flutter/lib/src/marker.dart b/packages/google_maps_flutter/lib/src/marker.dart index a6a719001e86..4289f7874c1b 100644 --- a/packages/google_maps_flutter/lib/src/marker.dart +++ b/packages/google_maps_flutter/lib/src/marker.dart @@ -293,20 +293,21 @@ class Marker { onTap == other.onTap; @override - int get hashCode => - markerId.hashCode ^ - alpha.hashCode ^ - anchor.hashCode ^ - consumeTapEvents.hashCode ^ - draggable.hashCode ^ - flat.hashCode ^ - icon.hashCode ^ - infoWindow.hashCode ^ - position.hashCode ^ - rotation.hashCode ^ - visible.hashCode ^ - zIndex.hashCode ^ - onTap.hashCode; + int get hashCode => hashValues( + markerId, + alpha, + anchor, + anchor, + consumeTapEvents, + draggable, + flat, + icon, + infoWindow, + position, + rotation, + visible, + zIndex, + onTap); @override String toString() { From cb7da58ce5251ec7c7ea3912e26f44a67afb8bd8 Mon Sep 17 00:00:00 2001 From: Klaus Jokinen <36441457+KlausJokinen@users.noreply.github.com> Date: Sun, 28 Jul 2019 19:40:03 +0300 Subject: [PATCH 3/3] Update _markersToChange to exclude new markers --- packages/google_maps_flutter/lib/src/marker_updates.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/google_maps_flutter/lib/src/marker_updates.dart b/packages/google_maps_flutter/lib/src/marker_updates.dart index 813eefea3c74..88e555787104 100644 --- a/packages/google_maps_flutter/lib/src/marker_updates.dart +++ b/packages/google_maps_flutter/lib/src/marker_updates.dart @@ -40,8 +40,9 @@ class _MarkerUpdates { .map(idToCurrentMarker) .toSet(); - final Set _markersToChange = - currentMarkersSet.difference(previousMarkersSet); + final Set _markersToChange = currentMarkersSet + .difference(previousMarkersSet) + ..removeAll(_markersToAdd); markersToAdd = _markersToAdd; markerIdsToRemove = _markerIdsToRemove;