warning banner removed from footer in fly mode
This commit is contained in:
@@ -22,8 +22,8 @@ class MockFlightControllerLink implements FlightControllerLink {
|
|||||||
_anchorLon = initialWaypoints.isEmpty ? 13.4 : initialWaypoints.first.lon,
|
_anchorLon = initialWaypoints.isEmpty ? 13.4 : initialWaypoints.first.lon,
|
||||||
_activeWaypointIndex = initialWaypoints.isEmpty ? null : 0;
|
_activeWaypointIndex = initialWaypoints.isEmpty ? null : 0;
|
||||||
|
|
||||||
final double _anchorLat;
|
double _anchorLat;
|
||||||
final double _anchorLon;
|
double _anchorLon;
|
||||||
final _random = math.Random();
|
final _random = math.Random();
|
||||||
|
|
||||||
bool _armed = false;
|
bool _armed = false;
|
||||||
@@ -111,6 +111,22 @@ class MockFlightControllerLink implements FlightControllerLink {
|
|||||||
_telemetryController = null;
|
_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
|
@override
|
||||||
Future<void> uploadMission(FlatWaypointList mission) async {
|
Future<void> uploadMission(FlatWaypointList mission) async {
|
||||||
// iNAV/MAVLink erlauben Mission-Upload nur im unarmed-Zustand (Doku 4.5).
|
// 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 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
|
||||||
import '../../domain/waypoint/flat_waypoint_list.dart';
|
import '../../domain/waypoint/flat_waypoint_list.dart';
|
||||||
|
import '../../transport/mock/mock_flight_controller_link.dart';
|
||||||
import 'current_mission_provider.dart';
|
import 'current_mission_provider.dart';
|
||||||
import 'database_provider.dart';
|
import 'database_provider.dart';
|
||||||
import 'follow_drone_provider.dart';
|
import 'follow_drone_provider.dart';
|
||||||
import 'map_controller_provider.dart';
|
import 'map_controller_provider.dart';
|
||||||
|
import 'telemetry_provider.dart';
|
||||||
import 'terrain_provider.dart';
|
import 'terrain_provider.dart';
|
||||||
|
|
||||||
/// Metadaten der aktuell in Bearbeitung befindlichen Mission - ergaenzt
|
/// 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) -
|
/// Doku 3.11, siehe fitMapToWaypoints in map_controller_provider.dart) -
|
||||||
/// das Laden einer anderen Mission waehrend des Verfolgens soll auf der
|
/// das Laden einer anderen Mission waehrend des Verfolgens soll auf der
|
||||||
/// neuen Mission stehen bleiben, nicht sofort wieder zur Drohne springen.
|
/// 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) {
|
void _fitMapToWaypoints(List<Waypoint> waypoints) {
|
||||||
ref.read(followDroneProvider.notifier).set(false);
|
ref.read(followDroneProvider.notifier).set(false);
|
||||||
fitMapControllerToWaypoints(ref.read(mapControllerProvider), waypoints);
|
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
|
/// Benennt eine gespeicherte Mission um (Doku 3.6: nur ueber die
|
||||||
|
|||||||
@@ -288,6 +288,7 @@ class _FlyScreenState extends ConsumerState<FlyScreen> {
|
|||||||
totalDurationSec: missionStats.durationSec,
|
totalDurationSec: missionStats.durationSec,
|
||||||
flyMissionStatus: flyMissionStatus,
|
flyMissionStatus: flyMissionStatus,
|
||||||
warnings: warnings,
|
warnings: warnings,
|
||||||
|
showWarningsBanner: false,
|
||||||
onDetailsTap: _openWaypointList,
|
onDetailsTap: _openWaypointList,
|
||||||
onWarningsTap: () => _openWarningsPanel(warnings),
|
onWarningsTap: () => _openWarningsPanel(warnings),
|
||||||
onSettingsTap: () => Navigator.of(context).push(MaterialPageRoute(
|
onSettingsTap: () => Navigator.of(context).push(MaterialPageRoute(
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ class MissionFooterBar extends ConsumerWidget {
|
|||||||
required this.totalDurationSec,
|
required this.totalDurationSec,
|
||||||
this.flyMissionStatus,
|
this.flyMissionStatus,
|
||||||
required this.warnings,
|
required this.warnings,
|
||||||
|
this.showWarningsBanner = true,
|
||||||
required this.onDetailsTap,
|
required this.onDetailsTap,
|
||||||
required this.onWarningsTap,
|
required this.onWarningsTap,
|
||||||
required this.onSettingsTap,
|
required this.onSettingsTap,
|
||||||
@@ -41,6 +42,13 @@ class MissionFooterBar extends ConsumerWidget {
|
|||||||
/// Distanz/Zeit dorthin. Bleibt im Plan-Modus null.
|
/// Distanz/Zeit dorthin. Bleibt im Plan-Modus null.
|
||||||
final FlyMissionStatus? flyMissionStatus;
|
final FlyMissionStatus? flyMissionStatus;
|
||||||
final List<MissionWarning> warnings;
|
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 onDetailsTap;
|
||||||
final VoidCallback onWarningsTap;
|
final VoidCallback onWarningsTap;
|
||||||
final VoidCallback onSettingsTap;
|
final VoidCallback onSettingsTap;
|
||||||
@@ -52,7 +60,7 @@ class MissionFooterBar extends ConsumerWidget {
|
|||||||
return Column(
|
return Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
if (warnings.isNotEmpty)
|
if (showWarningsBanner && warnings.isNotEmpty)
|
||||||
Container(
|
Container(
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
color: const Color(0xFF7C2D12),
|
color: const Color(0xFF7C2D12),
|
||||||
|
|||||||
Reference in New Issue
Block a user