Files
Melo/lib/library/song_list.dart
T
Hermes (Server)andClaude Haiku 4.5 db99e2b1f7 feat(ui): add favorite heart toggle, wire into song list
- Filled heart when favorited, outline when not (reactive via watchIsFavorite)
- Wired into every song list tile (library, search, playlists)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-18 15:29:51 +02:00

48 lines
1.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../player/audio_handler.dart';
import '../shared/cover.dart';
import '../shared/favorite_button.dart';
import 'database.dart';
import 'song_media.dart';
/// Scrollbare Songliste; Tippen spielt die ganze Liste ab dem Song ab.
class SongList extends StatelessWidget {
const SongList(this.songs, {super.key});
final List<Song> songs;
@override
Widget build(BuildContext context) {
final handler = context.read<MeloAudioHandler>();
return ListView.builder(
itemCount: songs.length,
itemBuilder: (context, i) {
final s = songs[i];
return ListTile(
leading: CoverImage(
artUri: s.coverPath != null ? Uri.file(s.coverPath!) : null,
size: 48,
radius: 6,
),
title: Text(s.title, maxLines: 1, overflow: TextOverflow.ellipsis),
subtitle: Text(s.artist ?? 'Unbekannt',
maxLines: 1, overflow: TextOverflow.ellipsis),
trailing: FavoriteButton(songId: s.id),
onTap: () async {
try {
await playSongs(handler, songs, i);
} catch (e) {
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Wiedergabe fehlgeschlagen: $e')),
);
}
}
},
);
},
);
}
}