disabled auto connect when switching to fly mode and no disconnect when leavin fly mode, race condition fix for connectionType ( now telemetry not working anymore), UI optimizations: centered speed and alt, zoom to mission uses full screen

This commit is contained in:
Constantin Leue
2026-08-02 21:45:46 +02:00
parent 35c4129eb7
commit 0649ae4507
7 changed files with 94 additions and 66 deletions
+12 -2
View File
@@ -120,6 +120,14 @@ class FlyScreen extends ConsumerWidget {
MediaQuery.of(context).padding.left,
MediaQuery.of(context).padding.right,
);
// Gleiche Reservierung fuer die Fusszeile wie die Rad-Readouts im
// Plan-Modus (PlanScreen: wheelBottomInset), damit die Alt/Speed-
// Anzeige zwischen Kopf- und Fusszeile vertikal zentriert erscheint,
// statt am Kartenrand zu kleben.
final footerBottomInset = math.max(
MediaQuery.of(context).size.height * 0.06,
124.0,
);
final terrainProfile = ref.watch(terrainProvider).profile;
final warnings = computeMissionWarnings(
waypoints: waypoints,
@@ -179,13 +187,15 @@ class FlyScreen extends ConsumerWidget {
// Rad-Widget (curAlt/curSpeed) gibt, dessen Wert sinnvoll waere.
Positioned(
top: 56,
bottom: footerBottomInset,
left: 14 + safeEdgeInset,
child: _liveReadout('Alt', telemetry?.altitudeM, 'm'),
child: Center(child: _liveReadout('Alt', telemetry?.altitudeM, 'm')),
),
Positioned(
top: 56,
bottom: footerBottomInset,
right: 14 + safeEdgeInset,
child: _liveReadout('Speed', telemetry?.speedMs, 'm/s'),
child: Center(child: _liveReadout('Speed', telemetry?.speedMs, 'm/s')),
),
Positioned(
left: 0,
@@ -135,18 +135,15 @@ class _WifiPanel extends ConsumerWidget {
final packetCount = ref.watch(wifiPacketCountProvider);
final connectedSsid = ref.watch(wifiConnectedSsidProvider).value;
// MSP-Telemetrie nur beobachten, wenn der Transport bereits verbunden
// ist - sonst wuerde allein das Oeffnen dieses Screens ueber
// telemetryProvider einen neuen Verbindungsversuch (samt Systemdialog)
// auslösen. Ist bereits eine echte Verbindung aktiv (z.B. weil der
// Fly-Modus sie aufgebaut hat), liefert dies denselben Provider/dieselbe
// MSP-Client-Instanz wie FlyScreen - keine zweite, konkurrierende
// Abfrage-Schleife. Der Telemetrie-Strom selbst ist nicht auf einen
// GPS-Fix gegated (siehe TelemetryFrame-Doku) - die Felder erscheinen
// hier also auch ohne Fix, sobald ueberhaupt eine MSP-Antwort ankommt.
final telemetry = linkState == LinkState.connected
? ref.watch(telemetryProvider).value
: null;
// telemetryProvider loest selbst keinen Verbindungsversuch aus, solange
// WLAN/MSP noch nicht ueber den "Connect"-Knopf verbunden ist (siehe
// dortige Doku) - hier also gefahrlos unbedingt beobachtbar. Liefert bei
// aktiver Verbindung denselben Provider/dieselbe MSP-Client-Instanz wie
// FlyScreen - keine zweite, konkurrierende Abfrage-Schleife. Der
// Telemetrie-Strom selbst ist nicht auf einen GPS-Fix gegated (siehe
// TelemetryFrame-Doku) - die Felder erscheinen hier also auch ohne Fix,
// sobald ueberhaupt eine MSP-Antwort ankommt.
final telemetry = ref.watch(telemetryProvider).value;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -186,8 +183,12 @@ class _WifiPanel extends ConsumerWidget {
SwitchListTile(
contentPadding: EdgeInsets.zero,
title: const Text('Auto-connect when entering Fly mode'),
// Trigger aktuell bewusst deaktiviert (Doku: "kein connect beim
// Wechsel in den Fly-Modus, um das Debuggen auf echter Hardware
// zu vereinfachen") - die Einstellung bleibt fuer eine spaetere
// Reaktivierung erhalten, wirkt sich derzeit aber auf nichts aus.
subtitle: const Text(
'Only once a network has been remembered.',
'Currently inactive - connect manually above.',
style: TextStyle(fontSize: 11),
),
value: connectionSettings?.connectionAutoConnect ?? true,