warning banner removed from footer in fly mode

This commit is contained in:
Constantin Leue
2026-08-04 10:20:16 +02:00
parent a66c199b37
commit 66e05f0ffe
4 changed files with 42 additions and 3 deletions
@@ -22,8 +22,8 @@ class MockFlightControllerLink implements FlightControllerLink {
_anchorLon = initialWaypoints.isEmpty ? 13.4 : initialWaypoints.first.lon,
_activeWaypointIndex = initialWaypoints.isEmpty ? null : 0;
final double _anchorLat;
final double _anchorLon;
double _anchorLat;
double _anchorLon;
final _random = math.Random();
bool _armed = false;
@@ -111,6 +111,22 @@ class MockFlightControllerLink implements FlightControllerLink {
_telemetryController = null;
}
/// Setzt die simulierte Position auf den ersten Wegpunkt von [waypoints]
/// zurueck und loescht die bisherige Drift (Doku: "beim Laden einer
/// Mission Mock-Drohnenposition auf ersten Wegpunkt setzen, solange die
/// Drohne nicht verbunden ist") - der Aufrufer (CurrentMissionMetaNotifier)
/// ruft dies nur auf, wenn [FlightControllerLink] tatsaechlich dieser Mock
/// ist, also noch keine echte Verbindung (WLAN/MSP) aktiv ist. Ohne
/// Wegpunkte faellt die Position auf den alten Berlin-Fallback zurueck,
/// analog zum Konstruktor.
void resetPosition(List<Waypoint> waypoints) {
_anchorLat = waypoints.isEmpty ? 52.5 : waypoints.first.lat;
_anchorLon = waypoints.isEmpty ? 13.4 : waypoints.first.lon;
_driftNorthM = 0;
_driftEastM = 0;
_activeWaypointIndex = waypoints.isEmpty ? null : 0;
}
@override
Future<void> uploadMission(FlatWaypointList mission) async {
// iNAV/MAVLink erlauben Mission-Upload nur im unarmed-Zustand (Doku 4.5).
@@ -3,10 +3,12 @@ import 'dart:async';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../domain/waypoint/flat_waypoint_list.dart';
import '../../transport/mock/mock_flight_controller_link.dart';
import 'current_mission_provider.dart';
import 'database_provider.dart';
import 'follow_drone_provider.dart';
import 'map_controller_provider.dart';
import 'telemetry_provider.dart';
import 'terrain_provider.dart';
/// Metadaten der aktuell in Bearbeitung befindlichen Mission - ergaenzt
@@ -110,9 +112,21 @@ class CurrentMissionMetaNotifier extends Notifier<MissionMeta> {
/// Doku 3.11, siehe fitMapToWaypoints in map_controller_provider.dart) -
/// das Laden einer anderen Mission waehrend des Verfolgens soll auf der
/// neuen Mission stehen bleiben, nicht sofort wieder zur Drohne springen.
///
/// Solange keine echte Verbindung (WLAN/MSP) aktiv ist - also
/// flightControllerLinkProvider noch der Mock ist - setzt dies zusaetzlich
/// die simulierte Drohnenposition auf den ersten Wegpunkt der neu
/// geladenen Mission zurueck (Doku: "beim Laden einer Mission Mock-
/// Drohnenposition auf ersten Wegpunkt setzen"), damit die Live-Details-
/// Ansicht sofort zur neuen Route passt statt an der vorherigen (oder dem
/// Berlin-Fallback) haengen zu bleiben.
void _fitMapToWaypoints(List<Waypoint> waypoints) {
ref.read(followDroneProvider.notifier).set(false);
fitMapControllerToWaypoints(ref.read(mapControllerProvider), waypoints);
final link = ref.read(flightControllerLinkProvider);
if (link is MockFlightControllerLink) {
link.resetPosition(waypoints);
}
}
/// Benennt eine gespeicherte Mission um (Doku 3.6: nur ueber die
+1
View File
@@ -288,6 +288,7 @@ class _FlyScreenState extends ConsumerState<FlyScreen> {
totalDurationSec: missionStats.durationSec,
flyMissionStatus: flyMissionStatus,
warnings: warnings,
showWarningsBanner: false,
onDetailsTap: _openWaypointList,
onWarningsTap: () => _openWarningsPanel(warnings),
onSettingsTap: () => Navigator.of(context).push(MaterialPageRoute(
+9 -1
View File
@@ -23,6 +23,7 @@ class MissionFooterBar extends ConsumerWidget {
required this.totalDurationSec,
this.flyMissionStatus,
required this.warnings,
this.showWarningsBanner = true,
required this.onDetailsTap,
required this.onWarningsTap,
required this.onSettingsTap,
@@ -41,6 +42,13 @@ class MissionFooterBar extends ConsumerWidget {
/// Distanz/Zeit dorthin. Bleibt im Plan-Modus null.
final FlyMissionStatus? flyMissionStatus;
final List<MissionWarning> warnings;
/// Blendet das Text-Warnbanner ueber der Fusszeile aus (Doku: "Banner mit
/// Warnungen ueber der Fusszeile im Fly-Modus entfernen") - der runde
/// Warnungsknopf in BottomStatsBar (oeffnet weiterhin WarningsPanel) bleibt
/// davon unberuehrt, nur die staendig sichtbare Textzeile verschwindet.
/// Default true, damit der Plan-Modus unveraendert bleibt.
final bool showWarningsBanner;
final VoidCallback onDetailsTap;
final VoidCallback onWarningsTap;
final VoidCallback onSettingsTap;
@@ -52,7 +60,7 @@ class MissionFooterBar extends ConsumerWidget {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
if (warnings.isNotEmpty)
if (showWarningsBanner && warnings.isNotEmpty)
Container(
width: double.infinity,
color: const Color(0xFF7C2D12),