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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user