downloadImage static method
Downloads the image
If the url is a Google Cloud Storage url, then the function get the download
url. The function sends a GET requests to url and return the binary response.
If there is an error in the requests, then the function retry the download
after retryDuration. If the accumulated time of the retry attempts is
greater than maxRetryDuration then the function returns an empty list
of bytes.
Implementation
@visibleForTesting
static Future<Uint8List> downloadImage(
String url,
Duration retryDuration,
Duration maxRetryDuration,
) async {
int totalTime = 0;
Uint8List bytes = Uint8List(0);
Duration _retryDuration = Duration(microseconds: 1);
if (Utils.isGsUrl(url)) url = await (_getStandardUrlFromGsUrl(url));
while (
totalTime <= maxRetryDuration.inSeconds && bytes.lengthInBytes <= 0) {
await Future.delayed(_retryDuration).then((_) async {
try {
http.Response response = await http.get(Uri.parse(url));
bytes = response.bodyBytes;
if (bytes.lengthInBytes <= 0) {
_retryDuration = retryDuration;
totalTime += retryDuration.inSeconds;
}
} catch (error) {
_retryDuration = retryDuration;
totalTime += retryDuration.inSeconds;
}
});
}
return bytes;
}