v2.51.4 — Review-Fix MED-2: „Trennen“ (Musikserver) persistiert jetzt

## MED-2 (navidrome_service.dart + home_screen.dart)
- Neues NavidromeService.loescheZugangsdaten(): löscht In-Memory-Zustand
  UND persistierte Credentials (SharedPreferences navidrome_url/user +
  SecureStorage navidrome_pass)
- _zeigeServerBrowser() ist async und ruft loescheZugangsdaten() beim
  Trennen auf — Chip bleibt nach App-Neustart rot statt wieder grün
This commit is contained in:
Dustin
2026-08-05 08:10:30 +02:00
parent 148ff4f21b
commit a24875726f
2 changed files with 25 additions and 4 deletions
+5 -4
View File
@@ -217,12 +217,13 @@ class _MeloHomeState extends State<MeloHome> {
} }
} }
void _zeigeServerBrowser() { Future<void> _zeigeServerBrowser() async {
if (_vm.navidrome.istVerbunden) { if (_vm.navidrome.istVerbunden) {
// Abmelden // Trennen: auch gespeicherte Zugangsdaten löschen (SharedPreferences +
_vm.navidrome.setCredentials('', '', ''); // SecureStorage) — sonst ist der Chip nach App-Neustart wieder grün.
await _vm.navidrome.loescheZugangsdaten();
_vm.navidromeAlben.clear(); _vm.navidromeAlben.clear();
setState(() {}); if (mounted) setState(() {});
return; return;
} }
// Verbinden: einfacher Login-Dialog // Verbinden: einfacher Login-Dialog
+20
View File
@@ -111,6 +111,26 @@ class NavidromeService {
} }
} }
/// Trennt die Verbindung dauerhaft: In-Memory-Zustand UND persistierte
/// Zugangsdaten (SharedPreferences + SecureStorage) werden gelöscht.
/// Sonst lädt `ladeGespeicherteZugangsdaten()` beim nächsten App-Start
/// die alten Daten wieder und der Musikserver-Chip wäre wieder grün.
Future<void> loescheZugangsdaten() async {
_serverUrl = '';
_user = '';
_password = '';
_salt = '';
_token = null;
try {
final prefs = await SharedPreferences.getInstance();
await prefs.remove('navidrome_url');
await prefs.remove('navidrome_user');
await _secure.delete(key: 'navidrome_pass');
} catch (e) {
debugPrint('Fehler beim Löschen der Navidrome-Zugangsdaten: $e');
}
}
bool get istVerbunden => _serverUrl.isNotEmpty && _user.isNotEmpty; bool get istVerbunden => _serverUrl.isNotEmpty && _user.isNotEmpty;
Uri _uri(String endpoint, [Map<String, String>? extra]) { Uri _uri(String endpoint, [Map<String, String>? extra]) {