move method

bool move(
  1. LatLng newCenter,
  2. double newZoom, {
  3. Offset offset = Offset.zero,
  4. bool hasGesture = false,
  5. required MapEventSource source,
  6. String? id,
})

Implementation

bool move(
  LatLng newCenter,
  double newZoom, {
  Offset offset = Offset.zero,
  bool hasGesture = false,
  required MapEventSource source,
  String? id,
}) {
  newZoom = fitZoomToBounds(newZoom);

  // Algorithm thanks to https://github.com/tlserver/flutter_map_location_marker
  if (offset != Offset.zero) {
    final newPoint = options.crs.latLngToPoint(newCenter, newZoom);
    newCenter = options.crs.pointToLatLng(
      rotatePoint(
        newPoint,
        newPoint - CustomPoint(offset.dx, offset.dy),
      ),
      newZoom,
    );
  }

  if (isOutOfBounds(newCenter)) {
    if (!options.slideOnBoundaries) return false;
    newCenter = containPoint(newCenter, _center);
  }

  if (options.maxBounds != null) {
    final adjustedCenter = adjustCenterIfOutsideMaxBounds(
      newCenter,
      newZoom,
      options.maxBounds!,
    );

    if (adjustedCenter == null) return false;
    newCenter = adjustedCenter;
  }

  if (newCenter == _center && newZoom == _zoom) return false;

  final oldCenter = _center;
  final oldZoom = _zoom;

  setState(() {
    _zoom = newZoom;
    _center = newCenter;
  });

  _pixelBounds = getPixelBounds();
  _bounds = _calculateBounds();
  _pixelOrigin = getNewPixelOrigin(newCenter);

  final movementEvent = MapEventWithMove.fromSource(
    targetCenter: newCenter,
    targetZoom: newZoom,
    oldCenter: oldCenter,
    oldZoom: oldZoom,
    hasGesture: hasGesture,
    source: source,
    id: id,
  );
  if (movementEvent != null) emitMapEvent(movementEvent);

  options.onPositionChanged?.call(
    MapPosition(
      center: newCenter,
      bounds: _bounds,
      zoom: newZoom,
      hasGesture: hasGesture,
    ),
    hasGesture,
  );

  return true;
}