fit map bug behoben fuer plan modus

This commit is contained in:
Constantin Leue
2026-08-02 22:23:49 +02:00
parent 2d7c50e030
commit 5dfd28c56b
2 changed files with 33 additions and 28 deletions
@@ -25,22 +25,34 @@ final mapControllerProvider = Provider<MapController>((ref) {
return controller;
});
/// Zentriert die Karte auf die Bounding-Box der uebergebenen Wegpunkte
/// (Doku 3.6, analog fitToWaypoints() im HTML-Demonstrator) - geteilt
/// zwischen dem manuellen Fit-Button (MapSearchControls) und den
/// map-bezogenen Warnungs-Aktionen (Doku 3.10), damit beide Stellen exakt
/// dieselbe Zoom-/Padding-Logik verwenden.
void fitMapToWaypoints(WidgetRef ref, List<Waypoint> waypoints) {
/// Zentriert [controller] auf die Bounding-Box der uebergebenen Wegpunkte
/// (Doku 3.6, analog fitToWaypoints() im HTML-Demonstrator). Nimmt bewusst
/// direkt den [MapController] statt eines Ref/WidgetRef entgegen, damit
/// diese eine Implementierung sowohl aus Widgets (ueber [fitMapToWaypoints]
/// unten) als auch aus Notifiern (CurrentMissionMetaNotifier.
/// _fitMapToWaypoints, WidgetRef und Notifier-Ref sind unterschiedliche,
/// nicht austauschbare Typen) aufgerufen werden kann - vorher gab es hier
/// zwei unabhaengige Kopien der Padding-Logik, die bereits einmal
/// auseinandergelaufen sind (Fit-Button symmetrisch, automatisches Fit beim
/// Missions-Laden noch mit alter Fusszeilen-Aussparung).
void fitMapControllerToWaypoints(MapController controller, List<Waypoint> waypoints) {
if (waypoints.isEmpty) return;
final points = [for (final w in waypoints) LatLng(w.lat, w.lon)];
ref.read(mapControllerProvider).fitCamera(
CameraFit.bounds(
bounds: LatLngBounds.fromPoints(points),
// Symmetrisch statt vorher unten 140 (Reservierung fuer die
// Fusszeile) - der Fit soll den ganzen Bildschirm ausnutzen statt
// dort unnoetig herauszuzoomen (Doku: "Fusszeile wird ausgespart,
// nicht genutzt").
padding: const EdgeInsets.all(50),
),
);
controller.fitCamera(
CameraFit.bounds(
bounds: LatLngBounds.fromPoints(points),
// Symmetrisch statt vorher unten 140 (Reservierung fuer die
// Fusszeile) - der Fit soll den ganzen Bildschirm ausnutzen statt
// dort unnoetig herauszuzoomen (Doku: "Fusszeile wird ausgespart,
// nicht genutzt").
padding: const EdgeInsets.all(50),
),
);
}
/// Bequemlichkeits-Wrapper fuer Aufrufer aus Widgets (Consumer/
/// ConsumerStatefulWidget mit [WidgetRef]) - geteilt zwischen dem manuellen
/// Fit-Button (MapSearchControls/FlyMapControls) und den map-bezogenen
/// Warnungs-Aktionen (Doku 3.10).
void fitMapToWaypoints(WidgetRef ref, List<Waypoint> waypoints) =>
fitMapControllerToWaypoints(ref.read(mapControllerProvider), waypoints);