Progress Status as stream

This commit is contained in:
gianlucaparadise 2022-01-13 19:36:50 +01:00
parent b5a22b9599
commit 030adf3920
2 changed files with 19 additions and 0 deletions

View file

@ -16,14 +16,23 @@ typedef AdBreakClipProgressListener = void Function(
);
typedef MediaStatusListener = void Function(MediaStatus mediaStatus);
class ProgressInfo {
int progressMs;
int durationMs;
ProgressInfo(this.progressMs, this.durationMs);
}
/// Class for controlling a media player application running on a receiver.
class RemoteMediaClient {
RemoteMediaClient(this._hostApi) {
this.mediaStatusStream = this._mediaStatusStreamController.stream;
this.progressStream = this._progressStreamController.stream;
}
void dispose() {
this._mediaStatusStreamController.close();
this._progressStreamController.close();
}
final CastHostApi _hostApi;
@ -35,6 +44,9 @@ class RemoteMediaClient {
/// Callback to get updates on the progress of the currently playing media.
ProgressListener? onProgressUpdated;
final _progressStreamController = StreamController<ProgressInfo>.broadcast();
late Stream<ProgressInfo> progressStream;
/// Called when updated media metadata is received.
VoidCallback? onMetadataUpdated;
@ -108,4 +120,10 @@ class RemoteMediaClient {
void dispatchMediaStatusUpdate(MediaStatus mediaStatus) {
this._mediaStatusStreamController.add(mediaStatus);
}
/// Internal method that shouldn't be visible
@internal
void dispatchProgressUpdate(int progressMs, int durationMs) {
this._progressStreamController.add(ProgressInfo(progressMs, durationMs));
}
}

View file

@ -150,6 +150,7 @@ class _CastFlutterApiImplementor extends CastFlutterApi {
@override
void onProgressUpdated(int progressMs, int durationMs) {
remoteMediaClient.onProgressUpdated?.call(progressMs, durationMs);
remoteMediaClient.dispatchProgressUpdate(progressMs, durationMs);
}
@override