Progress Status as stream
This commit is contained in:
parent
b5a22b9599
commit
030adf3920
2 changed files with 19 additions and 0 deletions
|
|
@ -16,14 +16,23 @@ typedef AdBreakClipProgressListener = void Function(
|
||||||
);
|
);
|
||||||
typedef MediaStatusListener = void Function(MediaStatus mediaStatus);
|
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 for controlling a media player application running on a receiver.
|
||||||
class RemoteMediaClient {
|
class RemoteMediaClient {
|
||||||
RemoteMediaClient(this._hostApi) {
|
RemoteMediaClient(this._hostApi) {
|
||||||
this.mediaStatusStream = this._mediaStatusStreamController.stream;
|
this.mediaStatusStream = this._mediaStatusStreamController.stream;
|
||||||
|
this.progressStream = this._progressStreamController.stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispose() {
|
void dispose() {
|
||||||
this._mediaStatusStreamController.close();
|
this._mediaStatusStreamController.close();
|
||||||
|
this._progressStreamController.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
final CastHostApi _hostApi;
|
final CastHostApi _hostApi;
|
||||||
|
|
@ -35,6 +44,9 @@ class RemoteMediaClient {
|
||||||
/// Callback to get updates on the progress of the currently playing media.
|
/// Callback to get updates on the progress of the currently playing media.
|
||||||
ProgressListener? onProgressUpdated;
|
ProgressListener? onProgressUpdated;
|
||||||
|
|
||||||
|
final _progressStreamController = StreamController<ProgressInfo>.broadcast();
|
||||||
|
late Stream<ProgressInfo> progressStream;
|
||||||
|
|
||||||
/// Called when updated media metadata is received.
|
/// Called when updated media metadata is received.
|
||||||
VoidCallback? onMetadataUpdated;
|
VoidCallback? onMetadataUpdated;
|
||||||
|
|
||||||
|
|
@ -108,4 +120,10 @@ class RemoteMediaClient {
|
||||||
void dispatchMediaStatusUpdate(MediaStatus mediaStatus) {
|
void dispatchMediaStatusUpdate(MediaStatus mediaStatus) {
|
||||||
this._mediaStatusStreamController.add(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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -150,6 +150,7 @@ class _CastFlutterApiImplementor extends CastFlutterApi {
|
||||||
@override
|
@override
|
||||||
void onProgressUpdated(int progressMs, int durationMs) {
|
void onProgressUpdated(int progressMs, int durationMs) {
|
||||||
remoteMediaClient.onProgressUpdated?.call(progressMs, durationMs);
|
remoteMediaClient.onProgressUpdated?.call(progressMs, durationMs);
|
||||||
|
remoteMediaClient.dispatchProgressUpdate(progressMs, durationMs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue