getMarkersToPaint method

  1. @override
List<Marker> getMarkersToPaint(
  1. BoundingBox boundary,
  2. int zoomLevel
)
override

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;
}