import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../shared/cover.dart'; import 'database.dart'; import 'song_grouping.dart'; import 'song_list.dart'; /// Bibliotheks-Tab: Album-Übersicht, gruppiert aus [MeloDb.watchSongs]. class AlbumListScreen extends StatelessWidget { const AlbumListScreen({super.key}); @override Widget build(BuildContext context) { final db = context.read(); return StreamBuilder>( stream: db.watchSongs(), builder: (context, snapshot) { final songs = snapshot.data ?? const []; if (songs.isEmpty) { return const Center( child: Text('Keine Alben', style: TextStyle(color: Colors.white54)), ); } final grouped = groupByAlbum(songs); final albums = grouped.keys.toList(); return ListView.builder( itemCount: albums.length, itemBuilder: (context, i) { final album = albums[i]; final albumSongs = grouped[album]!; final coverPath = albumSongs.first.coverPath; return ListTile( leading: CoverImage( artUri: coverPath != null ? Uri.file(coverPath) : null, size: 48, radius: 6, ), title: Text(album, maxLines: 1, overflow: TextOverflow.ellipsis), subtitle: Text('${albumArtistLabel(albumSongs)} · ${albumSongs.length} Songs', maxLines: 1, overflow: TextOverflow.ellipsis), onTap: () => Navigator.push( context, MaterialPageRoute( builder: (_) => _AlbumSongsScreen(album: album, songs: albumSongs), ), ), ); }, ); }, ); } } /// Zeigt alle Songs eines Albums. class _AlbumSongsScreen extends StatelessWidget { const _AlbumSongsScreen({required this.album, required this.songs}); final String album; final List songs; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text(album)), body: SongList(songs), ); } }