getBatchDownloadProgress method
Implementation
ValueNotifier<double> getBatchDownloadProgress(List<String> urls) {
ValueNotifier<double> progress = ValueNotifier(0);
var total = urls.length;
if (total == 0) {
return progress;
}
if (total == 1) {
return getDownload(urls.first)?.progress ?? progress;
}
var progressMap = <String, double>{};
for (var url in urls) {
DownloadTask? task = getDownload(url);
if (task != null) {
progressMap[url] = 0.0;
if (task.status.value.isCompleted) {
progressMap[url] = 1.0;
progress.value = progressMap.values.sum / total;
}
// ignore: prefer_typing_uninitialized_variables
var progressListener;
progressListener = () {
progressMap[url] = task.progress.value;
progress.value = progressMap.values.sum / total;
};
task.progress.addListener(progressListener);
// ignore: prefer_typing_uninitialized_variables
var listener;
listener = () {
if (task.status.value.isCompleted) {
progressMap[url] = 1.0;
progress.value = progressMap.values.sum / total;
task.status.removeListener(listener);
task.progress.removeListener(progressListener);
}
};
task.status.addListener(listener);
} else {
total--;
}
}
return progress;
}