MediaQueue callbacks flutter

This commit is contained in:
gianlucaparadise 2022-02-16 06:19:58 +01:00
parent 3f4044ad2e
commit f41c18e8c3
3 changed files with 81 additions and 2 deletions

View file

@ -0,0 +1,36 @@
import 'package:flutter/material.dart';
import 'package:flutter_cast_framework/src/PlatformBridgeApis.dart';
typedef MediaQueueItemsInsertedInRangeCallback = void Function(
int insertIndex, int insertCount);
typedef MediaQueueItemsChangedAtIndexesCallback = void Function(
List<int?> indexes);
typedef MediaQueueItemsReorderedAtIndexesCallback = void Function(
List<int?> indexes, int insertBeforeIndex);
class MediaQueue {
final CastHostApi _hostApi;
MediaQueue(this._hostApi);
/// Called when a contiguous range of queue items have been inserted into the queue.
MediaQueueItemsInsertedInRangeCallback? itemsInsertedInRange;
/// Called when the queue has been entirely reloaded.
VoidCallback? itemsReloaded;
/// Called when one or more queue items have been removed from the queue.
MediaQueueItemsChangedAtIndexesCallback? itemsRemovedAtIndexes;
/// Called when one or more queue items have been reordered in the queue.
MediaQueueItemsReorderedAtIndexesCallback? itemsReorderedAtIndexes;
/// Called when one or more queue items have been updated in the queue.
MediaQueueItemsChangedAtIndexesCallback? itemsUpdatedAtIndexes;
/// Called when one or more changes have been made to the queue.
VoidCallback? mediaQueueChanged;
/// Called when one or more changes are about to be made to the queue.
VoidCallback? mediaQueueWillChange;
}

View file

@ -5,6 +5,7 @@ import 'package:meta/meta.dart';
import '../../cast.dart'; import '../../cast.dart';
import '../PlatformBridgeApis.dart'; import '../PlatformBridgeApis.dart';
import './MediaQueue.dart';
typedef ProgressListener = void Function(int progressMs, int durationMs); typedef ProgressListener = void Function(int progressMs, int durationMs);
typedef AdBreakClipProgressListener = void Function( typedef AdBreakClipProgressListener = void Function(
@ -26,6 +27,7 @@ class ProgressInfo {
/// 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.mediaQueue = MediaQueue(_hostApi);
this.mediaStatusStream = this._mediaStatusStreamController.stream; this.mediaStatusStream = this._mediaStatusStreamController.stream;
this.progressStream = this._progressStreamController.stream; this.progressStream = this._progressStreamController.stream;
} }
@ -37,6 +39,9 @@ class RemoteMediaClient {
final CastHostApi _hostApi; final CastHostApi _hostApi;
/// Returns the associated MediaQueue.
late MediaQueue mediaQueue;
/// Listenable state of the remote media player /// Listenable state of the remote media player
ValueListenable<PlayerState> get playerState => _playerStateNotifier; ValueListenable<PlayerState> get playerState => _playerStateNotifier;
final _playerStateNotifier = ValueNotifier(PlayerState.unknown); final _playerStateNotifier = ValueNotifier(PlayerState.unknown);

View file

@ -4,6 +4,7 @@ import 'package:flutter_cast_framework/src/cast/RemoteMediaClient.dart';
import 'PlatformBridgeApis.dart'; import 'PlatformBridgeApis.dart';
import 'cast/CastContext.dart'; import 'cast/CastContext.dart';
import 'cast/MediaQueue.dart';
/// Entrypoint for the Flutter Cast Framework /// Entrypoint for the Flutter Cast Framework
class FlutterCastFramework { class FlutterCastFramework {
@ -34,8 +35,8 @@ class _CastFlutterApiImplementor extends CastFlutterApi {
final List<String> namespaces = []; final List<String> namespaces = [];
SessionManager get sessionManager => castContext.sessionManager; SessionManager get sessionManager => castContext.sessionManager;
RemoteMediaClient get remoteMediaClient => RemoteMediaClient get remoteMediaClient => sessionManager.remoteMediaClient;
castContext.sessionManager.remoteMediaClient; MediaQueue get mediaQueue => remoteMediaClient.mediaQueue;
_CastFlutterApiImplementor({ _CastFlutterApiImplementor({
required this.castContext, required this.castContext,
@ -165,4 +166,41 @@ class _CastFlutterApiImplementor extends CastFlutterApi {
); );
} }
//endregion //endregion
//region MediaQueueu
@override
void itemsInsertedInRange(int insertIndex, int insertCount) {
mediaQueue.itemsInsertedInRange?.call(insertIndex, insertCount);
}
@override
void itemsReloaded() {
mediaQueue.itemsReloaded?.call();
}
@override
void itemsRemovedAtIndexes(List<int?> indexes) {
mediaQueue.itemsRemovedAtIndexes?.call(indexes);
}
@override
void itemsReorderedAtIndexes(List<int?> indexes, int insertBeforeIndex) {
mediaQueue.itemsReorderedAtIndexes?.call(indexes, insertBeforeIndex);
}
@override
void itemsUpdatedAtIndexes(List<int?> indexes) {
mediaQueue.itemsUpdatedAtIndexes?.call(indexes);
}
@override
void mediaQueueChanged() {
mediaQueue.mediaQueueChanged?.call();
}
@override
void mediaQueueWillChange() {
mediaQueue.mediaQueueWillChange?.call();
}
//endregion
} }