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
+7 -34
View File
@@ -1,4 +1,3 @@
import 'dart:async';
import 'dart:math' as math;
import 'package:flutter/material.dart';
@@ -6,12 +5,8 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../app_mode/app_mode_cubit.dart';
import '../../transport/connection_type.dart';
import '../../transport/link_transport.dart';
import '../dmc_colors.dart';
import '../providers/connection_settings_provider.dart';
import '../providers/flight_mode_provider.dart';
import '../providers/wifi_connection_provider.dart';
import 'flight_mode_pill.dart';
import 'fly_map_controls.dart';
import 'header_wind_pill.dart';
@@ -110,7 +105,13 @@ class TopModeBar extends ConsumerWidget {
// Eintritt in den Fly-Modus setzt immer auf Waypoint
// zurueck (Doku 3.11).
ref.read(flightModeProvider.notifier).reset();
_maybeAutoConnectWifi(ref);
// Kein Auto-Connect mehr beim Wechsel in den Fly-Modus
// (bewusst entfernt, um das Debuggen auf echter Hardware
// zu vereinfachen - Verbindungsaufbau laeuft jetzt
// ausschliesslich ueber den expliziten "Connect"-Knopf in
// den Settings). Die Verbindung selbst bleibt ohnehin ueber
// Moduswechsel hinweg bestehen, siehe
// flightControllerLinkProvider.
},
),
],
@@ -121,34 +122,6 @@ class TopModeBar extends ConsumerWidget {
}
}
/// Verbindet automatisch zur mLRS-Bruecke, wenn in den Fly-Modus gewechselt
/// wird (Doku Kommunikationsschicht v2 Abschnitt 8: "Verbindung automatisch
/// herstellen bei Wechsel in Fly, wenn WLAN gemerkt"). Voraussetzungen:
/// Verbindungsart ist WLAN, "Auto-connect"-Einstellung ist an, und es gibt
/// bereits eine gemerkte SSID aus einer frueheren erfolgreichen Verbindung -
/// ohne gemerkte SSID muesste ohnehin der Systemdialog erscheinen, das ist
/// dann kein "automatisches" Verbinden mehr. Der Fortschritt ist ueber
/// [_WifiConnectionProgressPill] sichtbar.
Future<void> _maybeAutoConnectWifi(WidgetRef ref) async {
final settings = ref.read(connectionSettingsProvider).value;
if (settings == null) return;
if (settings.connectionType != ConnectionType.wifi) return;
if (!settings.connectionAutoConnect) return;
if (settings.connectionWifiLastSsid == null) return;
final transport = ref.read(wifiTransportProvider);
if (transport.currentState == LinkState.connected ||
transport.currentState == LinkState.connecting) {
return;
}
try {
await transport.connect();
} on LinkConnectException {
// Grund/Nachricht sind bereits ueber den State-Stream gemeldet, siehe
// _WifiConnectionProgressPill.
}
}
class _ModeButton extends StatelessWidget {
const _ModeButton({
required this.label,