import 'dart:async'; import 'package:http/http.dart' as http; typedef OnProgress = void Function(int bytes, int totalBytes); class FileRequest extends http.MultipartRequest { FileRequest( super.method, super.url, this.onProgress, ); final OnProgress onProgress; @override http.ByteStream finalize() { final byteStream = super.finalize(); final total = contentLength; int bytes = 0; final t = StreamTransformer.fromHandlers( handleData: (List data, EventSink> sink) { bytes += data.length; onProgress(bytes, total); if (total >= bytes) { sink.add(data); } }, ); final stream = byteStream.transform(t); return http.ByteStream(stream); } }