diff --git a/lib/src/cast/RemoteMediaClient.dart b/lib/src/cast/RemoteMediaClient.dart index 15d85f7..a808d63 100644 --- a/lib/src/cast/RemoteMediaClient.dart +++ b/lib/src/cast/RemoteMediaClient.dart @@ -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.broadcast(); + late Stream 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)); + } } diff --git a/lib/src/flutter_cast_framework.dart b/lib/src/flutter_cast_framework.dart index 4666b32..c9028bf 100644 --- a/lib/src/flutter_cast_framework.dart +++ b/lib/src/flutter_cast_framework.dart @@ -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