downloadUrl method
Implementation
@override
Future<bool> downloadUrl(
String url,
String saveName, {
int timeout = 1800,
void Function(int loaded, int total)? progressCallback,
}) async {
final completer = Completer<bool>();
try {
web.XMLHttpRequest request = web.XMLHttpRequest();
request.open('GET', url, true);
request.responseType = 'blob';
request.onLoad.listen((event) {
if (request.status == 200) {
final blob = request.response as web.Blob;
final url = web.URL.createObjectURL(blob);
web.HTMLAnchorElement anchor = web.HTMLAnchorElement();
anchor.href = url;
anchor.style.display = 'none';
anchor.download = saveName;
anchor.target = '_blank';
anchor.rel = 'noopener noreferrer';
anchor.click();
anchor.remove();
web.URL.revokeObjectURL(url);
if (!completer.isCompleted) completer.complete(true);
} else {
if (!completer.isCompleted) completer.complete(false);
}
});
request.onError.listen((event) {
if (!completer.isCompleted) completer.complete(false);
});
request.onProgress.listen((event) {
if (event.lengthComputable && progressCallback != null) {
// final percent = event.loaded / event.total * 100;
progressCallback(event.loaded, event.total);
}
});
request.send();
} catch (err) {
logger.severe('Error at StorageUtilImpl.downloadFile >>> $err');
if (!completer.isCompleted) completer.complete(false);
}
return completer.future.timeout(Duration(seconds: timeout), onTimeout: () => false);
}