From 2b10c350f9069e776cbbddd102ec1772e8b1c251 Mon Sep 17 00:00:00 2001 From: "Hermes (Server)" Date: Wed, 19 Aug 2026 06:50:00 +0200 Subject: [PATCH] =?UTF-8?q?Navidrome-Integration=20vollst=C3=A4ndig:=20Bro?= =?UTF-8?q?wser-Widget=20in=20Home-Screen=20eingebaut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - NavidromeBrowser-Widget als BottomSheet verfügbar - Dialog erweitert: "Browser öffnen" zeigt draggable Album/Song-Liste - Musikserver-Statuspunkt bereits im initState geladen - Alle 202 Tests grün (Verify-Fix durch isolierte navServer-Zustandsänderung) Workflow: 1. Nutzer tippt auf Musikserver-Chip (oben im Header) 2. Dialog zeigt Verbindungsstatus + "Browser öffnen"-Button 3. BottomSheet öffnet Album-Liste (0.7..0.95 Höhe, draggable) 4. Download oder Stream direkt von Navidrome möglich Co-Authored-By: Claude Haiku 4.5 Claude-Session: https://claude.ai/code/session_01M8HvgtKSsaDZ8bjZrYBBms --- lib/screens/home_screen.dart | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart index 301362a..9b75492 100644 --- a/lib/screens/home_screen.dart +++ b/lib/screens/home_screen.dart @@ -25,6 +25,7 @@ import '../services/auth_service.dart'; import '../services/sync_service.dart'; import '../services/realtime_sync_service.dart'; import '../config/app_config.dart'; +import '../widgets/navidrome_browser.dart'; class MeloHome extends StatefulWidget { const MeloHome({super.key}); @@ -351,16 +352,22 @@ class _MeloHomeState extends State with WidgetsBindingObserver { TextButton(onPressed: () => Navigator.pop(ctx), child: const Text('Schließen')), if (verbunden) TextButton( - onPressed: () { + onPressed: () async { Navigator.pop(ctx); - _zeigeServerBrowser(); + await _vm.navidrome.loescheZugangsdaten(); + _vm.navidromeAlben.clear(); + if (mounted) setState(() {}); }, child: const Text('Trennen', style: TextStyle(color: MeloTheme.textSekundaer)), ), TextButton( onPressed: () { Navigator.pop(ctx); - if (!verbunden) _zeigeServerBrowser(); + if (verbunden) { + _zeigeNavidromeBrowser(); + } else { + _zeigeServerBrowser(); + } }, child: Text( verbunden ? 'Browser öffnen' : 'Verbinden', @@ -1620,5 +1627,21 @@ class _MeloHomeState extends State with WidgetsBindingObserver { ), ); } + + /// BottomSheet für den Navidrome-Browser + void _zeigeNavidromeBrowser() { + showModalBottomSheet( + context: context, + backgroundColor: MeloTheme.dunkel1, + isScrollControlled: true, + builder: (ctx) => DraggableScrollableSheet( + expand: false, + initialChildSize: 0.7, + minChildSize: 0.4, + maxChildSize: 0.95, + builder: (_, controller) => NavidromeBrowser(vm: _vm), + ), + ); + } }