v2.48.1 — Repeat-Modus (Aus/Titel/Playlist)

## PlayerService
- Enum Wiederholmodus { aus, titel, playlist } + Getter/Setter
- naechstes(): titel → gleicher Song von vorn (seek 0 + play)
- naechsterIndex(): zentrale Berechnung des nächsten Index
  - playlist: nach letztem Song wieder von vorne (auch bei Shuffle: neu mischen)
  - aus: Ende der Warteschlange stoppt
- Auto-Next (ProcessingState.completed) läuft über naechstes() → Repeat wirkt auch automatisch

## MiniPlayer
- Repeat-Icon mit 3 Zuständen (repeat / repeat_one), rot wenn aktiv, Wechsel bei Tipp

Keine neuen Packages, flutter analyze 0 Issues, Tests 4/4
This commit is contained in:
Dustin
2026-08-04 16:24:26 +02:00
parent bb8ee56894
commit 42767a5646
2 changed files with 78 additions and 17 deletions
+22
View File
@@ -107,6 +107,8 @@ class _MiniPlayerState extends State<MiniPlayer> {
),
// Shuffle
_shuffleBtn(),
// Repeat (3 Zustände)
_repeatBtn(),
// Steuerung
_btn(Icons.skip_previous, _player.vorheriges),
_playBtn(),
@@ -142,6 +144,26 @@ class _MiniPlayerState extends State<MiniPlayer> {
);
}
/// Repeat-Icon — 3 Zustände (aus → Titel → Playlist), Wechsel bei Tipp
Widget _repeatBtn() {
final modus = _player.wiederholmodus;
final (icon, farbe) = switch (modus) {
Wiederholmodus.aus => (Icons.repeat, Colors.white),
Wiederholmodus.titel => (Icons.repeat_one, MeloTheme.rot),
Wiederholmodus.playlist => (Icons.repeat, MeloTheme.rot),
};
return _btn(icon, _naechsterWiederholmodus, farbe: farbe);
}
void _naechsterWiederholmodus() {
final modus = _player.wiederholmodus;
_player.setWiederholmodus(switch (modus) {
Wiederholmodus.aus => Wiederholmodus.titel,
Wiederholmodus.titel => Wiederholmodus.playlist,
Wiederholmodus.playlist => Wiederholmodus.aus,
});
}
Widget _btn(IconData icon, VoidCallback onTap, {Color farbe = Colors.white}) {
return Material(
color: Colors.transparent,