fit map bug behoben fuer plan modus
This commit is contained in:
@@ -25,15 +25,20 @@ final mapControllerProvider = Provider<MapController>((ref) {
|
|||||||
return controller;
|
return controller;
|
||||||
});
|
});
|
||||||
|
|
||||||
/// Zentriert die Karte auf die Bounding-Box der uebergebenen Wegpunkte
|
/// Zentriert [controller] auf die Bounding-Box der uebergebenen Wegpunkte
|
||||||
/// (Doku 3.6, analog fitToWaypoints() im HTML-Demonstrator) - geteilt
|
/// (Doku 3.6, analog fitToWaypoints() im HTML-Demonstrator). Nimmt bewusst
|
||||||
/// zwischen dem manuellen Fit-Button (MapSearchControls) und den
|
/// direkt den [MapController] statt eines Ref/WidgetRef entgegen, damit
|
||||||
/// map-bezogenen Warnungs-Aktionen (Doku 3.10), damit beide Stellen exakt
|
/// diese eine Implementierung sowohl aus Widgets (ueber [fitMapToWaypoints]
|
||||||
/// dieselbe Zoom-/Padding-Logik verwenden.
|
/// unten) als auch aus Notifiern (CurrentMissionMetaNotifier.
|
||||||
void fitMapToWaypoints(WidgetRef ref, List<Waypoint> waypoints) {
|
/// _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;
|
if (waypoints.isEmpty) return;
|
||||||
final points = [for (final w in waypoints) LatLng(w.lat, w.lon)];
|
final points = [for (final w in waypoints) LatLng(w.lat, w.lon)];
|
||||||
ref.read(mapControllerProvider).fitCamera(
|
controller.fitCamera(
|
||||||
CameraFit.bounds(
|
CameraFit.bounds(
|
||||||
bounds: LatLngBounds.fromPoints(points),
|
bounds: LatLngBounds.fromPoints(points),
|
||||||
// Symmetrisch statt vorher unten 140 (Reservierung fuer die
|
// Symmetrisch statt vorher unten 140 (Reservierung fuer die
|
||||||
@@ -44,3 +49,10 @@ void fitMapToWaypoints(WidgetRef ref, List<Waypoint> waypoints) {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 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);
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:flutter/widgets.dart';
|
|
||||||
import 'package:flutter_map/flutter_map.dart';
|
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:latlong2/latlong.dart';
|
|
||||||
|
|
||||||
import '../../domain/waypoint/flat_waypoint_list.dart';
|
import '../../domain/waypoint/flat_waypoint_list.dart';
|
||||||
import 'current_mission_provider.dart';
|
import 'current_mission_provider.dart';
|
||||||
@@ -99,16 +96,12 @@ class CurrentMissionMetaNotifier extends Notifier<MissionMeta> {
|
|||||||
/// bliebe die Kamera an der zuletzt betrachteten Stelle stehen, waehrend
|
/// bliebe die Kamera an der zuletzt betrachteten Stelle stehen, waehrend
|
||||||
/// eine voellig andernorts gelegene Mission angezeigt wird. Analog
|
/// eine voellig andernorts gelegene Mission angezeigt wird. Analog
|
||||||
/// fitToWaypoints() im HTML-Demonstrator bzw. _onFitPressed() in
|
/// fitToWaypoints() im HTML-Demonstrator bzw. _onFitPressed() in
|
||||||
/// MapSearchControls, hier aber automatisch statt nutzerausgeloest.
|
/// MapSearchControls, hier aber automatisch statt nutzerausgeloest -
|
||||||
|
/// nutzt dieselbe Padding-Logik wie der manuelle Fit-Button
|
||||||
|
/// (fitMapControllerToWaypoints), damit beide nicht wieder auseinander-
|
||||||
|
/// laufen koennen.
|
||||||
void _fitMapToWaypoints(List<Waypoint> waypoints) {
|
void _fitMapToWaypoints(List<Waypoint> waypoints) {
|
||||||
if (waypoints.isEmpty) return;
|
fitMapControllerToWaypoints(ref.read(mapControllerProvider), waypoints);
|
||||||
final points = [for (final w in waypoints) LatLng(w.lat, w.lon)];
|
|
||||||
ref.read(mapControllerProvider).fitCamera(
|
|
||||||
CameraFit.bounds(
|
|
||||||
bounds: LatLngBounds.fromPoints(points),
|
|
||||||
padding: const EdgeInsets.fromLTRB(50, 50, 50, 140),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Benennt eine gespeicherte Mission um (Doku 3.6: nur ueber die
|
/// Benennt eine gespeicherte Mission um (Doku 3.6: nur ueber die
|
||||||
|
|||||||
Reference in New Issue
Block a user