waitUntilStopped method
Future<bool>
waitUntilStopped({
- Duration startTimeout = const Duration(seconds: 3),
- Duration timeout = const Duration(minutes: 2),
- bool forceStopOnTimeout = true,
inherited
Wait until playback stops/completes
Flow:
- If not already playing, first waits for start (with
startTimeout). - Resolves when either:
- onPlayerComplete fires, or
- onIsPlayingChanged emits
false
Returns true if it stopped/completed before timeout.
Throws UnsupportedError if releaseMode=loop or the channel supports
multiple concurrent players (e.g., pooling).
Implementation
Future<bool> waitUntilStopped({
Duration startTimeout = const Duration(seconds: 3),
Duration timeout = const Duration(minutes: 2),
bool forceStopOnTimeout = true,
}) async {
ensureWaitSupported('waitUntilStopped');
if (!_isPlaying) {
final started = await waitUntilStarted(timeout: startTimeout);
if (!started) return false;
}
try {
await Future.any([
onPlayerComplete.first,
onIsPlayingChanged.where((v) => v == false).first,
]).timeout(timeout);
return true;
} on TimeoutException {
FiftyAudioLogger.log('waitUntilStopped() timed out.');
if (forceStopOnTimeout) {
await stop();
}
return false;
}
}