readFullyAsBytes function
Implementation
Future<Uint8List> readFullyAsBytes(HttpClientResponse response) {
final Completer<Uint8List> completer = Completer<Uint8List>.sync();
if (response.contentLength == -1) {
final List<List<int>> chunks = <List<int>>[];
int contentLength = 0;
response.listen((List<int> chunk) {
chunks.add(chunk);
contentLength += chunk.length;
}, onDone: () {
final Uint8List bytes = Uint8List(contentLength);
int offset = 0;
for (List<int> chunk in chunks) {
bytes.setRange(offset, offset + chunk.length, chunk);
offset += chunk.length;
}
completer.complete(bytes);
}, onError: completer.completeError, cancelOnError: true);
} else {
// If the response has a content length, then allocate a buffer of the correct size.
final Uint8List bytes = Uint8List(response.contentLength);
int offset = 0;
response.listen(
(List<int> chunk) {
bytes.setRange(offset, offset + chunk.length, chunk);
offset += chunk.length;
},
onError: completer.completeError,
onDone: () {
completer.complete(bytes);
},
cancelOnError: true);
}
return completer.future;
}