follow mode button, zoom mode and abort behavior tuning
This commit is contained in:
@@ -6,6 +6,7 @@ import '../providers/current_mission_provider.dart';
|
||||
import '../providers/follow_drone_provider.dart';
|
||||
import '../providers/map_controller_provider.dart';
|
||||
import '../providers/telemetry_provider.dart';
|
||||
import 'drone_follow_icon.dart';
|
||||
import 'nav_icon_button.dart';
|
||||
|
||||
/// Kartensteuerung im Fly-Modus (Doku 3.11): Ortssuche/Home entfallen hier
|
||||
@@ -16,10 +17,11 @@ import 'nav_icon_button.dart';
|
||||
class FlyMapControls extends ConsumerWidget {
|
||||
const FlyMapControls({super.key});
|
||||
|
||||
/// Zielzoom beim Aktivieren des Folgemodus - naeher als der
|
||||
/// Standard-Kartenzoom (siehe MissionMap._initialZoom), damit der Sprung
|
||||
/// tatsaechlich als Zoom wahrgenommen wird und nicht nur als Verschieben.
|
||||
static const _followZoom = 18.0;
|
||||
/// Zielzoom beim Aktivieren des Folgemodus - deutlich weiter herausgezoomt
|
||||
/// als der Standard-Kartenzoom (siehe MissionMap._initialZoom), damit
|
||||
/// waehrend des Verfolgens genug Gelaende/Route um die Drohne herum
|
||||
/// sichtbar bleibt statt nur ihrer unmittelbaren Umgebung.
|
||||
static const _followZoom = 16.0;
|
||||
|
||||
/// Erster Tap zoomt auf die aktuelle Telemetrieposition und aktiviert den
|
||||
/// Folgemodus (FlyScreen haengt sich darauf ein, zieht die Karte bei
|
||||
@@ -41,6 +43,14 @@ class FlyMapControls extends ConsumerWidget {
|
||||
ref.read(followDroneProvider.notifier).set(true);
|
||||
}
|
||||
|
||||
/// Beendet den Folgemodus explizit, statt sich auf den Abbruch bei
|
||||
/// manueller Karteninteraktion in FlyScreen zu verlassen (FlyScreen._
|
||||
/// onMapEvent) - fitMapToWaypoints() bewegt die Kamera ueber denselben
|
||||
/// MapController (source == mapController), gilt dort also nicht als
|
||||
/// manuelle Geste und wuerde den Folgemodus sonst aktiv lassen. Ohne
|
||||
/// diesen Abbruch wuerde der naechste Telemetrie-Frame die Kamera sofort
|
||||
/// wieder von der gerade eingestellten Missionsuebersicht weg auf die
|
||||
/// Drohne zurueckziehen.
|
||||
void _onFitPressed(BuildContext context, WidgetRef ref) {
|
||||
final waypoints = ref.read(currentMissionProvider);
|
||||
if (waypoints.isEmpty) {
|
||||
@@ -48,6 +58,7 @@ class FlyMapControls extends ConsumerWidget {
|
||||
.showSnackBar(const SnackBar(content: Text('No waypoints to fit')));
|
||||
return;
|
||||
}
|
||||
ref.read(followDroneProvider.notifier).set(false);
|
||||
fitMapToWaypoints(ref, waypoints);
|
||||
}
|
||||
|
||||
@@ -58,8 +69,7 @@ class FlyMapControls extends ConsumerWidget {
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
NavIconButton(
|
||||
icon: following ? Icons.gps_fixed : Icons.my_location,
|
||||
active: following,
|
||||
iconWidget: DroneFollowIcon(active: following),
|
||||
onTap: () => _onDronePressed(context, ref),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
|
||||
Reference in New Issue
Block a user