getMarkersToPaint method
returns the markers to draw for the given boundary
. If this method needs more time return an empty list and call setRepaint() when finished.
Implementation
@override
List<Marker> getMarkersToPaint(BoundingBox boundary, int zoomLevel) {
if (zoomLevel < minZoomLevel || zoomLevel > maxZoomLevel) {
// clear cache to avoid false positives at [isTapped]
_previousMarkers = [];
_previousZoomLevel = -1;
_previousBoundingBox = null;
return [];
}
BoundingBox extended = boundary.extendMeters(extendMeters);
if (_previousBoundingBox != null &&
_previousBoundingBox!.containsBoundingBox(boundary) &&
zoomLevel == _previousZoomLevel) {
return _previousMarkers;
}
retrieveMarkersFor(extended, zoomLevel);
_previousBoundingBox = extended;
_previousZoomLevel = zoomLevel;
List<BasicPointMarker> markersToDraw = _markers
.where((marker) => marker.shouldPaint(extended, zoomLevel))
.toList();
_previousMarkers.forEach((element) {
if (element is _ClusterMarker) element.dispose();
});
_previousMarkers.clear();
if (zoomLevel < 15) {
MarkerGrid markerGrid = MarkerGrid(boundingBox: extended);
markersToDraw.forEach((element) {
markerGrid.addMarker(element);
});
markerGrid.markers.forEach((key, List<BasicPointMarker> value) {
if (value.length < minClusterItems) {
_previousMarkers.addAll(value);
} else {
BasicPointMarker clusterMarker = createClusterMarker(value);
_previousMarkers.add(clusterMarker);
}
});
} else {
// for high zoom levels show all markers even if they are at the total same position
_previousMarkers = markersToDraw;
}
return _previousMarkers;
}