finalize method

  1. @override
ByteStream finalize()

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

Implementation

@override
ByteStream finalize() {
  final ByteStream byteStream = super.finalize();
  if (onProgress == null) return byteStream;

  final int total = contentLength;
  int bytes = 0;

  final streamTransformer = StreamTransformer.fromHandlers(
    handleData: (List<int> data, EventSink<List<int>> sink) {
      bytes += data.length;
      onProgress!(bytes, total);
      sink.add(data);
    },
  );

  final Stream<List<int>> stream = byteStream.transform(streamTransformer);

  return ByteStream(stream);
}