v2.48.2 — Queue-UI (Warteschlange-Sheet)

## PlayerService
- warteschlange Getter (unveränderliche Kopie) + aktuellerIndex
- spieleAlsNaechstes(Song): fügt nach aktuellem Song ein
- amEndeHinzufuegen(Song): hängt ans Ende an
- verschiebeInWarteschlange(von, nach): Drag-and-Drop mit korrekter Anpassung des aktuellen Index

## WarteschlangeSheet (neu: lib/widgets/warteschlange_sheet.dart)
- Bottom-Sheet: aktuelle Warteschlange, aktueller Song rot markiert (▶)
- Tipp auf Song → sofort abspielen
- ReorderableListView (Bordmittel) zum Umsortieren per Drag
- Leer-Zustand + Titel-Zähler

## MiniPlayer
- Tipp auf den Miniplayer öffnet die Warteschlange (Bottom-Sheet)

Keine neuen Packages, flutter analyze 0 Issues, Tests 4/4
This commit is contained in:
Dustin
2026-08-04 16:25:04 +02:00
parent 42767a5646
commit 5edfae01e5
3 changed files with 215 additions and 11 deletions
+45
View File
@@ -256,6 +256,51 @@ class PlayerService extends ChangeNotifier {
notifyListeners();
}
// ─── Warteschlange (Queue-UI) ───
/// Unveränderliche Kopie der Warteschlange für die Anzeige.
List<Song> get warteschlange => List.unmodifiable(_warteschlange);
/// Index des aktuell spielenden Songs in der Warteschlange.
int get aktuellerIndex => _aktuellerIndex;
/// Fügt [song] direkt nach dem aktuellen Song ein.
void spieleAlsNaechstes(Song song) {
if (_aktuellerIndex < 0 || _warteschlange.isEmpty) {
_warteschlange.add(song);
} else {
_warteschlange.insert(_aktuellerIndex + 1, song);
}
if (_zufallsmodus) _baueShuffleReihenfolge();
notifyListeners();
}
/// Hängt [song] ans Ende der Warteschlange an.
void amEndeHinzufuegen(Song song) {
_warteschlange.add(song);
if (_zufallsmodus) _baueShuffleReihenfolge();
notifyListeners();
}
/// Verschiebt einen Eintrag in der Warteschlange (Drag-and-Drop).
/// Der aktuelle Index wird entsprechend angepasst.
void verschiebeInWarteschlange(int von, int nach) {
if (von < 0 || von >= _warteschlange.length) return;
if (nach < 0 || nach >= _warteschlange.length) return;
if (von == nach) return;
final song = _warteschlange.removeAt(von);
_warteschlange.insert(nach, song);
if (_aktuellerIndex == von) {
_aktuellerIndex = nach;
} else if (von < _aktuellerIndex && nach >= _aktuellerIndex) {
_aktuellerIndex -= 1;
} else if (von > _aktuellerIndex && nach <= _aktuellerIndex) {
_aktuellerIndex += 1;
}
if (_zufallsmodus) _baueShuffleReihenfolge();
notifyListeners();
}
@override
void dispose() {
_autoNextSub?.cancel();