UI collapsable height profile, english settings menue

This commit is contained in:
Constantin Leue
2026-07-31 09:49:28 +02:00
parent 8cc9a51a34
commit cb91436fe4
12 changed files with 157 additions and 29 deletions
+49 -1
View File
@@ -5,15 +5,18 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../domain/mission/mission_warnings.dart';
import '../providers/active_drone_profile_provider.dart';
import '../providers/altitude_profile_provider.dart';
import '../providers/mission_meta_provider.dart';
import 'missions_drones_panel.dart';
import 'mountain_peak_icon.dart';
/// Statuszeile am unteren Bildschirmrand (HTML-Demonstrator: #bottomBar/
/// #statsRow). Details-Pille bleibt mittig und oeffnet die Wegpunktliste;
/// Mission-Chip links und Drohnen-Chip rechts oeffnen das Verwaltungsmenue
/// mit dem passenden Starttab (HTML-Demonstrator: #missionNameBtn/
/// #droneNameBtn). Warnungs- und Settings-Knopf sitzen neben dem
/// Drohnen-Chip rechts aussen.
/// Drohnen-Chip rechts aussen. Der Hoehenprofil-Toggle (Bergkuppen-Icon)
/// sitzt links der Details-Pille.
/// Der Send-Button ist bewusst nicht Teil dieses Schritts - die dafuer
/// noetige Upload-Anbindung existiert noch nicht.
class BottomStatsBar extends ConsumerWidget {
@@ -47,6 +50,7 @@ class BottomStatsBar extends ConsumerWidget {
Widget build(BuildContext context, WidgetRef ref) {
final missionName = ref.watch(currentMissionMetaProvider).name;
final droneName = ref.watch(activeDroneProfileProvider).name;
final isAltitudeProfileExpanded = ref.watch(altitudeProfileExpandedProvider);
// Gespiegelter Randabstand (wie in PlanScreen fuer die Drehraeder, Doku:
// "Symmetrischer Randabstand auf beiden Seiten"): die groessere der
@@ -98,6 +102,13 @@ class BottomStatsBar extends ConsumerWidget {
),
),
),
_AltitudeProfileToggleButton(
isExpanded: isAltitudeProfileExpanded,
onTap: () => ref
.read(altitudeProfileExpandedProvider.notifier)
.toggle(),
),
const SizedBox(width: 6),
_detailsPill(),
// Drohnen-Pille + Warnungs-/Settings-Knopf rechts. Die Pille
// sitzt in Flexible, damit sie bei langen Namen zu Gunsten der
@@ -184,6 +195,43 @@ class BottomStatsBar extends ConsumerWidget {
}
}
/// Runder Knopf links der Details-Pille zum Ein-/Ausklappen des
/// Mini-Hoehenprofils. Zeigt eine stilisierte Bergkuppe: ausgeklappt steht
/// sie kopfueber (Zacken zeigen nach unten - signalisiert "einklappen"),
/// eingeklappt (Standard, um moeglichst viel Kartenflaeche frei zu lassen)
/// richtig herum (Zacken zeigen nach oben - signalisiert "ausklappen").
class _AltitudeProfileToggleButton extends StatelessWidget {
const _AltitudeProfileToggleButton({
required this.isExpanded,
required this.onTap,
});
final bool isExpanded;
final VoidCallback onTap;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: onTap,
child: Container(
width: 34,
height: 34,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.white.withValues(alpha: 0.12),
),
child: Center(
child: MountainPeakIcon(
size: 16,
color: Colors.white,
upsideDown: isExpanded,
),
),
),
);
}
}
/// Kleiner, roter Rundknopf fuer aktive Warnungen (Doku 3.10, HTML-
/// Demonstrator: #warningsBtn) - oeffnet die Warnungsliste.
class _WarningButton extends StatelessWidget {