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
@@ -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),