file_formdata.dart 697 B

12345678910111213141516171819202122232425262728293031
  1. import 'dart:async';
  2. import 'package:dio/dio.dart';
  3. typedef OnProgress = void Function(int currentBytes, int totalBytes);
  4. class FileFormData extends FormData {
  5. FileFormData(this.onProgress) : super();
  6. final OnProgress onProgress;
  7. @override
  8. Stream<List<int>> finalize() {
  9. final byteStream = super.finalize();
  10. final total = length;
  11. int bytes = 0;
  12. final t = StreamTransformer.fromHandlers(
  13. handleData: (List<int> data, EventSink<List<int>> sink) {
  14. bytes += data.length;
  15. onProgress(bytes, total);
  16. if (total >= bytes) {
  17. sink.add(data);
  18. }
  19. },
  20. );
  21. final stream = byteStream.transform(t);
  22. return stream;
  23. }
  24. }