import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../domain/mission/mission_stats.dart'; import '../../domain/mission/mission_warnings.dart'; import '../../domain/waypoint/flat_waypoint_list.dart'; import '../providers/altitude_profile_provider.dart'; import 'bottom_stats_bar.dart'; import 'mini_altitude_profile.dart'; /// Gemeinsamer Fusszeilen-Aufbau (Warnungsbanner + Hoehenprofil + /// BottomStatsBar), geteilt zwischen Plan- und Fly-Modus (Doku 3.9/3.10) - /// beide zeigen dieselbe Missionsuebersicht, nur Reticle/Draeder gibt es /// ausschliesslich im Plan-Modus. class MissionFooterBar extends ConsumerWidget { const MissionFooterBar({ super.key, required this.waypoints, required this.legClimbBad, required this.vertexBad, required this.activeIndex, required this.totalDistanceM, required this.totalDurationSec, this.flyMissionStatus, required this.warnings, this.showWarningsBanner = true, required this.onDetailsTap, required this.onWarningsTap, required this.onSettingsTap, }); final List waypoints; final List legClimbBad; final List vertexBad; final int activeIndex; final double totalDistanceM; final double totalDurationSec; /// Nur im Fly-Modus gesetzt (Doku: "Live-Status der Mission in der /// Details-Pille") - ersetzt dort die statischen Plan-Werte /// (Wegpunktzahl/Gesamtdistanz/-dauer) durch aktiven Wegpunkt sowie /// Distanz/Zeit dorthin. Bleibt im Plan-Modus null. final FlyMissionStatus? flyMissionStatus; final List 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; @override Widget build(BuildContext context, WidgetRef ref) { final isExpanded = ref.watch(altitudeProfileExpandedProvider); return Column( mainAxisSize: MainAxisSize.min, children: [ if (showWarningsBanner && warnings.isNotEmpty) Container( width: double.infinity, color: const Color(0xFF7C2D12), padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 12), child: Text( warnings.map((w) => w.text).join(' ยท '), textAlign: TextAlign.center, style: const TextStyle(color: Color(0xFFFDE3D0), fontSize: 12), ), ), Container( width: double.infinity, color: const Color(0xFF0F0F0F).withValues(alpha: 0.72), child: Column( mainAxisSize: MainAxisSize.min, children: [ if (isExpanded) Padding( padding: const EdgeInsets.fromLTRB(8, 6, 8, 0), child: MiniAltitudeProfile( waypoints: waypoints, legClimbBad: legClimbBad, vertexBad: vertexBad, activeIndex: activeIndex, ), ), BottomStatsBar( waypointCount: waypoints.length, totalDistanceM: totalDistanceM, totalDurationSec: totalDurationSec, flyMissionStatus: flyMissionStatus, onTap: onDetailsTap, warnings: warnings, onWarningsTap: onWarningsTap, onSettingsTap: onSettingsTap, ), ], ), ), ], ); } }