v2.48.3 — Sleep-Timer
## PlayerService - setSleepTimer(Duration): nach Ablauf wird pausiert (Timer aus dart:async) - cancelSleepTimer(), sleepTimerAktiv, sleepRestzeit (live berechnet) - Timer wird in dispose() aufgeräumt ## WarteschlangeSheet - Schlaf-Timer-Zeile: Optionen Aus/15/30/45/60 Min als Chips - Aktiver Timer zeigt Restzeit (⏱ MM:SS), Aktualisierung jede Sekunde - 'Aus'-Chip rot wenn Timer inaktiv, sonst gewählte Dauer aktiv markiert Keine neuen Packages, flutter analyze 0 Issues, Tests 4/4
This commit is contained in:
@@ -33,6 +33,10 @@ class PlayerService extends ChangeNotifier {
|
||||
// ─── Wiederholmodus (Repeat) ───
|
||||
Wiederholmodus _wiederholmodus = Wiederholmodus.aus;
|
||||
|
||||
// ─── Sleep-Timer ───
|
||||
Timer? _sleepTimer;
|
||||
DateTime? _sleepEnde;
|
||||
|
||||
AudioPlayer get _p {
|
||||
if (_player == null) {
|
||||
_player = AudioPlayer();
|
||||
@@ -301,9 +305,43 @@ class PlayerService extends ChangeNotifier {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// ─── Sleep-Timer ───
|
||||
|
||||
bool get sleepTimerAktiv => _sleepTimer != null;
|
||||
|
||||
/// Verbleibende Zeit bis zum automatischen Pausieren (null wenn inaktiv).
|
||||
Duration? get sleepRestzeit {
|
||||
final ende = _sleepEnde;
|
||||
if (ende == null) return null;
|
||||
final rest = ende.difference(DateTime.now());
|
||||
return rest.isNegative ? Duration.zero : rest;
|
||||
}
|
||||
|
||||
/// Startet den Sleep-Timer — nach [dauer] wird die Wiedergabe pausiert.
|
||||
void setSleepTimer(Duration dauer) {
|
||||
cancelSleepTimer();
|
||||
_sleepEnde = DateTime.now().add(dauer);
|
||||
_sleepTimer = Timer(dauer, () {
|
||||
_sleepTimer = null;
|
||||
_sleepEnde = null;
|
||||
pause();
|
||||
notifyListeners();
|
||||
});
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
/// Bricht den Sleep-Timer ab.
|
||||
void cancelSleepTimer() {
|
||||
_sleepTimer?.cancel();
|
||||
_sleepTimer = null;
|
||||
_sleepEnde = null;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_autoNextSub?.cancel();
|
||||
_sleepTimer?.cancel();
|
||||
_player?.dispose();
|
||||
_player = null;
|
||||
_songWechsel.close();
|
||||
|
||||
Reference in New Issue
Block a user