import 'dart:async'; import 'package:dio/dio.dart'; typedef OnProgress = void Function(int currentBytes, int totalBytes); class FileFormData extends FormData { FileFormData(this.onProgress) : super(); final OnProgress onProgress; @override Stream> finalize() { final byteStream = super.finalize(); final total = length; 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 stream; } }