move method
bool
move(
- LatLng newCenter,
- double newZoom, {
- Offset offset = Offset.zero,
- bool hasGesture = false,
- required MapEventSource source,
- 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;
}