Fix: Review-Findings korrigiert (Tag-Leiste, Profil, Singleton u.a.)

CRIT:
- Tag-Leiste: Toggle-Kopf 'Tags & Filter' eingebaut (war unerreichbar) + TagStats
- Profil: Cloud-Count vor Dialog aufloesen (kein 'Instance of Future' mehr)
HIGH:
- CloudEinstellungen: toten Sync-Timer entfernt (echter Timer im ViewModel)
- StatistikCard + RecentWidget jetzt eingebaut (gesamtMB/gesamtMin endlich genutzt)
- CloudService als Singleton (konsistenter Token-Zustand in allen Services)
MED/LOW:
- Playlist-Erkennung nur noch via list= Parameter
- Player: fehlende Quelle wird geloggt statt still
- song_tile: null-ID-Guard vor Tag-Dialog
- Scanner-Log mit Exception-Objekt
- FavoritenService: anzahlFavoriten() fuer StatistikCard
This commit is contained in:
Hermes (Server)
2026-07-31 15:42:54 +02:00
parent b3aedc53f9
commit 8b6a04ead8
18 changed files with 767 additions and 503 deletions
+4 -1
View File
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import '../services/navidrome_service.dart';
import '../utils/farb_theme.dart';
import '../viewmodels/melo_home_viewmodel.dart';
import '../config/app_config.dart';
/// Navidrome-Browser als Bottom-Sheet.
/// Manuell in home_screen.dart einbaubar.
@@ -216,7 +217,7 @@ class _NavidromeBrowserState extends State<NavidromeBrowser> {
}
void _zeigeLoginDialog(BuildContext context) {
final urlCtrl = TextEditingController();
final urlCtrl = TextEditingController(text: AppConfig.navidromeUrl);
final userCtrl = TextEditingController();
final passCtrl = TextEditingController();
bool verbindet = false;
@@ -258,6 +259,8 @@ class _NavidromeBrowserState extends State<NavidromeBrowser> {
final ok = await widget.vm.ladeNavidromeAlben();
verbindet = false;
if (ok && ctx.mounted) {
// Zugangsdaten speichern
await widget.vm.navidrome.speichereZugangsdaten(urlCtrl.text, userCtrl.text, passCtrl.text);
Navigator.pop(ctx);
if (context.mounted) setState(() {});
} else if (ctx.mounted) {