drone status menue with status and critical event log implemented

This commit is contained in:
Constantin Leue
2026-08-04 23:15:56 +02:00
parent 75736793f2
commit 8e4df2d0d3
15 changed files with 571 additions and 24 deletions
+11 -18
View File
@@ -14,16 +14,17 @@ import '../../../domain/wind/wind_math.dart';
import '../../../transport/flight_controller_link.dart';
import '../../providers/active_drone_profile_provider.dart';
import '../../providers/current_mission_provider.dart';
import '../../providers/drone_event_log_provider.dart';
import '../../providers/follow_drone_provider.dart';
import '../../providers/map_controller_provider.dart';
import '../../providers/telemetry_provider.dart';
import '../../providers/terrain_provider.dart';
import '../settings/settings_screen.dart';
import '../../widgets/drone_marker_icon.dart';
import '../../widgets/drone_status_warnings_panel.dart';
import '../../widgets/mission_footer_bar.dart';
import '../../widgets/mission_map.dart';
import '../../widgets/waypoint_list_panel.dart';
import '../../widgets/warnings_panel.dart';
/// Fly-Modus (Architektur-Doku 3.10/3.11): zeigt dieselbe Karte + Fusszeile
/// wie der Plan-Modus, aber ohne Reticle/Draeder - im Flug wird die Route
@@ -116,23 +117,9 @@ class _FlyScreenState extends ConsumerState<FlyScreen> {
);
}
void _openWarningsPanel(List<MissionWarning> warnings) {
void _openDroneStatusWarningsPanel() {
Navigator.of(context).push(MaterialPageRoute<void>(
builder: (routeContext) => WarningsPanel(
warnings: warnings,
onClose: () => Navigator.of(routeContext).pop(),
onWarningTap: (warning) {
Navigator.of(routeContext).pop();
switch (warning.action) {
case WarningAction.altitude:
_openWaypointList(initialTab: PanelTab.altitude);
case WarningAction.speed:
_openWaypointList(initialTab: PanelTab.speed);
case WarningAction.map:
fitMapToWaypoints(ref, ref.read(currentMissionProvider));
}
},
),
builder: (_) => const DroneStatusWarningsPanel.warnings(),
));
}
@@ -142,6 +129,11 @@ class _FlyScreenState extends ConsumerState<FlyScreen> {
final droneProfile = ref.watch(activeDroneProfileProvider);
final telemetry = ref.watch(telemetryProvider).value;
final followDrone = ref.watch(followDroneProvider);
// Beobachtet das Ereignis-Log dauerhaft ab dem ersten Eintritt in den
// Fly-Modus (Doku: "log von kritischen ereignissen mit time stamp") -
// haelt drone_event_log_provider.dart's Notifier am Leben, solange
// dieser Screen existiert, siehe dessen Klassendoku.
final droneEventLog = ref.watch(droneEventLogProvider);
// Solange der ueber den GPS-Knopf in der Kopfleiste (FlyMapControls)
// aktivierte Folgemodus aktiv ist, jede neue Telemetrie-Position
@@ -307,8 +299,9 @@ class _FlyScreenState extends ConsumerState<FlyScreen> {
warnings: warnings,
showWarningsBanner: false,
batteryPercent: telemetry?.batteryPercent,
forceShowWarningsButton: droneEventLog.isNotEmpty,
onDetailsTap: _openWaypointList,
onWarningsTap: () => _openWarningsPanel(warnings),
onWarningsTap: _openDroneStatusWarningsPanel,
onSettingsTap: () => Navigator.of(context).push(MaterialPageRoute(
builder: (_) => const SettingsScreen(),
)),