watchUntil method
Future<CloudMediaItem>
watchUntil(
- String mediaId,
- CloudMediaStatus targetStatus, {
- Duration timeout = const Duration(seconds: 60),
Wait until a media item reaches targetStatus.
Throws TimeoutException if the target is not reached within timeout.
final synced = await watcher.watchUntil(
item.id,
CloudMediaStatus.synced,
timeout: Duration(minutes: 2),
);
print(synced.downloadUrl);
Implementation
Future<CloudMediaItem> watchUntil(
String mediaId,
CloudMediaStatus targetStatus, {
Duration timeout = const Duration(seconds: 60),
}) async {
final completer = Completer<CloudMediaItem>();
late StreamSubscription<CloudMediaItem> sub;
sub = CloudMedia.watch(mediaId).listen((item) {
if (item.status == targetStatus && !completer.isCompleted) {
completer.complete(item);
sub.cancel();
}
});
Future.delayed(timeout, () {
if (!completer.isCompleted) {
sub.cancel();
completer.completeError(
TimeoutException('watchUntil timed out after $timeout'));
}
});
return completer.future;
}