Improve state management
This commit is contained in:
parent
b10d13d413
commit
d2b3fca67f
|
@ -293,9 +293,10 @@ public class AudioPlayer implements MethodCallHandler, Player.EventListener {
|
||||||
case stopped:
|
case stopped:
|
||||||
result.success(null);
|
result.success(null);
|
||||||
break;
|
break;
|
||||||
// TODO: Allow stopping from buffered/connecting states.
|
// TODO: Allow stopping from connecting states.
|
||||||
case completed:
|
case completed:
|
||||||
case playing:
|
case playing:
|
||||||
|
case buffering:
|
||||||
case paused:
|
case paused:
|
||||||
player.setPlayWhenReady(false);
|
player.setPlayWhenReady(false);
|
||||||
player.seekTo(0L);
|
player.seekTo(0L);
|
||||||
|
|
|
@ -194,15 +194,20 @@ class AudioPlayer {
|
||||||
Future<void> play() async {
|
Future<void> play() async {
|
||||||
StreamSubscription subscription;
|
StreamSubscription subscription;
|
||||||
Completer completer = Completer();
|
Completer completer = Completer();
|
||||||
subscription = playbackStateStream
|
bool startedPlaying = false;
|
||||||
.skip(1)
|
subscription = playbackStateStream.listen((state) {
|
||||||
.where((state) =>
|
// TODO: It will be more reliable to let the platform
|
||||||
state == AudioPlaybackState.paused ||
|
// side wait for completion since events on the flutter
|
||||||
state == AudioPlaybackState.stopped ||
|
// side can lag behind the platform side.
|
||||||
state == AudioPlaybackState.completed)
|
if (startedPlaying &&
|
||||||
.listen((state) {
|
(state == AudioPlaybackState.paused ||
|
||||||
subscription.cancel();
|
state == AudioPlaybackState.stopped ||
|
||||||
completer.complete();
|
state == AudioPlaybackState.completed)) {
|
||||||
|
subscription.cancel();
|
||||||
|
completer.complete();
|
||||||
|
} else if (state == AudioPlaybackState.playing) {
|
||||||
|
startedPlaying = true;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
await _invokeMethod('play');
|
await _invokeMethod('play');
|
||||||
await completer.future;
|
await completer.future;
|
||||||
|
|
Loading…
Reference in New Issue