diff --git a/lib/src/cast/MediaQueue.dart b/lib/src/cast/MediaQueue.dart index cd99483..7039713 100644 --- a/lib/src/cast/MediaQueue.dart +++ b/lib/src/cast/MediaQueue.dart @@ -1,5 +1,8 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter_cast_framework/src/PlatformBridgeApis.dart'; +import 'package:meta/meta.dart'; typedef MediaQueueItemsInsertedInRangeCallback = void Function( int insertIndex, int insertCount); @@ -11,7 +14,14 @@ typedef MediaQueueItemsReorderedAtIndexesCallback = void Function( class MediaQueue { final CastHostApi _hostApi; - MediaQueue(this._hostApi); + MediaQueue(this._hostApi) { + this.itemUpdatedAtIndexStream = + this._itemUpdatedAtIndexStreamController.stream; + } + + void dispose() { + this._itemUpdatedAtIndexStreamController.close(); + } Future getItemCount() { return _hostApi.getQueueItemCount(); @@ -41,4 +51,17 @@ class MediaQueue { /// Called when one or more changes are about to be made to the queue. VoidCallback? onMediaQueueWillChange; + + final _itemUpdatedAtIndexStreamController = StreamController.broadcast(); + late Stream itemUpdatedAtIndexStream; + + /// Internal method that shouldn't be visible + @internal + void dispatchItemUpdatedAtIndex(List indexes) { + indexes.forEach((i) { + if (i != null) { + this._itemUpdatedAtIndexStreamController.add(i); + } + }); + } } diff --git a/lib/src/flutter_cast_framework.dart b/lib/src/flutter_cast_framework.dart index 1a2ec65..2d6f93a 100644 --- a/lib/src/flutter_cast_framework.dart +++ b/lib/src/flutter_cast_framework.dart @@ -191,6 +191,7 @@ class _CastFlutterApiImplementor extends CastFlutterApi { @override void itemsUpdatedAtIndexes(List indexes) { mediaQueue.onItemsUpdatedAtIndexes?.call(indexes); + mediaQueue.dispatchItemUpdatedAtIndex(indexes); } @override