finalize method

  1. @override
ByteStream finalize()

Freezes all mutable fields and returns a single-subscription ByteStream that will emit the request body.

Implementation

@override
http.ByteStream finalize() {
  final byteStream = super.finalize();

  final total = contentLength;
  int bytes = 0;

  final t = StreamTransformer<List<int>, List<int>>.fromHandlers(
    handleData: (data, sink) {
      bytes += data.length;
      onProgress(bytes, total);
      sink.add(data);
    },
    handleDone: (sink) {
      sink.close();
      onProgress(null, null);
    },
    handleError: (error, stackTrace, sink) {
      sink.addError(error, stackTrace);
      onProgress(null, null);
    },
  );

  final stream = byteStream.transform(t);
  return http.ByteStream(stream);
}