whenBatchDownloadsComplete method
Implementation
Future<List<DownloadTask?>?> whenBatchDownloadsComplete(List<String> urls,
{Duration timeout = const Duration(hours: 2)}) async {
var completer = Completer<List<DownloadTask?>?>();
var completed = 0;
var total = urls.length;
for (var url in urls) {
DownloadTask? task = getDownload(url);
if (task != null) {
if (task.status.value.isCompleted) {
completed++;
if (completed == total) {
completer.complete(getBatchDownloads(urls));
}
}
// ignore: prefer_typing_uninitialized_variables
var listener;
listener = () {
if (task.status.value.isCompleted) {
completed++;
if (completed == total) {
completer.complete(getBatchDownloads(urls));
task.status.removeListener(listener);
}
}
};
task.status.addListener(listener);
} else {
total--;
if (total == 0) {
completer.complete(null);
}
}
}
return completer.future.timeout(timeout);
}