Line data Source code
1 : import 'dart:async';
2 : import 'dart:convert';
3 : import 'dart:typed_data';
4 :
5 : import 'package:http/http.dart' as http;
6 :
7 : extension ToBytesWithProgress on http.ByteStream {
8 : /// Collects the data of this stream in a [Uint8List].
9 2 : Future<Uint8List> toBytesWithProgress(void Function(int)? onProgress) {
10 : var length = 0;
11 2 : final completer = Completer<Uint8List>();
12 2 : final sink = ByteConversionSink.withCallback(
13 6 : (bytes) => completer.complete(Uint8List.fromList(bytes)),
14 : );
15 2 : listen(
16 2 : (bytes) {
17 2 : sink.add(bytes);
18 6 : onProgress?.call(length += bytes.length);
19 : },
20 2 : onError: completer.completeError,
21 2 : onDone: sink.close,
22 : cancelOnError: true,
23 : );
24 2 : return completer.future;
25 : }
26 : }
|