setMarkers method

void setMarkers(
  1. List<Marker> markers, {
  2. bool resetHistory = false,
  3. bool merge = false,
})

Implementation

void setMarkers(
  List<Marker> markers, {
  bool resetHistory = false,
  bool merge = false,
}) {
  assert(() {
    for (final m in markers) {
      m.ensureHasKey();
    }
    return true;
  }());
  assert(
    !(resetHistory && merge),
    'setMarkers cannot reset history and merge at the same time.',
  );
  if (resetHistory) {
    setItems(markers, resetHistory: true);
    return;
  }

  if (merge) {
    final currentByKey = {
      for (final marker in current)
        if (marker.key != null) marker.key!: marker,
    };

    final merged = [
      for (final marker in markers)
        if (marker.key case final key?)
          switch (currentByKey[key]) {
            final Marker currentMarker? =>
              _mergeMarker(currentMarker, marker),
            _ => marker,
          }
        else
          marker,
    ];

    setItems(merged, resetHistory: false);
    return;
  }

  setItems(markers, resetHistory: false);
}