load method
Implementation
Future<MiniProgramMediaPlaybackSession> load(
MiniProgramMediaPlaybackRequest request,
) async {
if (_disposed) {
throw const MiniProgramMediaPlaybackException(
errorCode: MiniProgramErrorCodes.mediaProviderUnavailable,
message: 'The media playback manager has been disposed.',
);
}
final key = _key(request.miniProgramId, request.playerId);
final existing = _sessions[key];
if (existing != null && existing.sourceKey == request.sourceKey) {
if (request.autoplay) await existing.play();
return existing;
}
final pending = _pending[key];
if (pending != null) {
if (pending.sourceKey == request.sourceKey) return pending.future;
throw const MiniProgramMediaPlaybackException(
errorCode: MiniProgramErrorCodes.mediaRequestInProgress,
message: 'Another media source is loading for this player.',
);
}
final generation = (_generations[key] ?? 0) + 1;
_generations[key] = generation;
_sessions.remove(key);
final future = _replaceSession(key, existing, request, generation);
_pending[key] = _PendingMediaPlaybackLoad(
sourceKey: request.sourceKey,
future: future,
);
try {
return await future;
} finally {
if (identical(_pending[key]?.future, future)) {
_pending.remove(key);
}
}
}