live mission details in footer implemented

This commit is contained in:
Constantin Leue
2026-08-04 09:48:01 +02:00
parent 35351140ae
commit a66c199b37
17 changed files with 295 additions and 17 deletions
+29 -3
View File
@@ -3,6 +3,7 @@ import 'dart:math' as math;
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 '../providers/active_drone_profile_provider.dart';
import '../providers/altitude_profile_provider.dart';
@@ -25,6 +26,7 @@ class BottomStatsBar extends ConsumerWidget {
required this.waypointCount,
required this.totalDistanceM,
required this.totalDurationSec,
this.flyMissionStatus,
required this.onTap,
required this.onSettingsTap,
this.warnings = const [],
@@ -34,6 +36,10 @@ class BottomStatsBar extends ConsumerWidget {
final int waypointCount;
final double totalDistanceM;
final double totalDurationSec;
/// Siehe MissionFooterBar-Doku - nur im Fly-Modus gesetzt, ersetzt dann
/// die statischen Felder in der Details-Pille.
final FlyMissionStatus? flyMissionStatus;
final VoidCallback onTap;
/// Oeffnet das Settings-Menue (runder Zahnrad-Knopf rechts der
@@ -147,6 +153,26 @@ class BottomStatsBar extends ConsumerWidget {
}
Widget _detailsPill() {
final flyStatus = flyMissionStatus;
// Im Fly-Modus (flyStatus != null) ersetzen aktiver Wegpunkt sowie
// Distanz/Zeit dorthin die statischen Plan-Werte (Doku: "Live-Status
// der Mission in der Details-Pille, genau wie vorher aber mit aktivem
// Wegpunkt statt Gesamtzahl, Distanz/Zeit zum naechsten Wegpunkt statt
// Gesamtdistanz/-dauer").
final waypointText = flyStatus != null
? '${flyStatus.activeWaypointNumber}/${flyStatus.waypointCount}'
: '$waypointCount WP';
final distanceText = flyStatus != null
? (flyStatus.distanceToActiveWaypointM != null
? '${flyStatus.distanceToActiveWaypointM!.round()} m'
: '—')
: '${totalDistanceM.round()} m';
final durationText = flyStatus != null
? (flyStatus.etaToActiveWaypointSec != null
? _fmtDuration(flyStatus.etaToActiveWaypointSec!)
: '—')
: _fmtDuration(totalDurationSec);
return GestureDetector(
onTap: onTap,
child: Container(
@@ -169,17 +195,17 @@ class BottomStatsBar extends ConsumerWidget {
const SizedBox(width: 10),
const Icon(Icons.flag, size: 14, color: Colors.white),
const SizedBox(width: 4),
Text('$waypointCount WP',
Text(waypointText,
style: const TextStyle(color: Colors.white, fontSize: 14)),
const SizedBox(width: 14),
const Icon(Icons.straighten, size: 14, color: Colors.white),
const SizedBox(width: 4),
Text('${totalDistanceM.round()} m',
Text(distanceText,
style: const TextStyle(color: Colors.white, fontSize: 14)),
const SizedBox(width: 14),
const Icon(Icons.access_time, size: 14, color: Colors.white),
const SizedBox(width: 4),
Text(_fmtDuration(totalDurationSec),
Text(durationText,
style: const TextStyle(color: Colors.white, fontSize: 14)),
],
),