file_request.dart 765 B

1234567891011121314151617181920212223242526272829303132333435
  1. import 'dart:async';
  2. import 'package:http/http.dart' as http;
  3. typedef OnProgress = void Function(int bytes, int totalBytes);
  4. class FileRequest extends http.MultipartRequest {
  5. FileRequest(
  6. super.method,
  7. super.url,
  8. this.onProgress,
  9. );
  10. final OnProgress onProgress;
  11. @override
  12. http.ByteStream finalize() {
  13. final byteStream = super.finalize();
  14. final total = contentLength;
  15. int bytes = 0;
  16. final t = StreamTransformer.fromHandlers(
  17. handleData: (List<int> data, EventSink<List<int>> sink) {
  18. bytes += data.length;
  19. onProgress(bytes, total);
  20. if (total >= bytes) {
  21. sink.add(data);
  22. }
  23. },
  24. );
  25. final stream = byteStream.transform(t);
  26. return http.ByteStream(stream);
  27. }
  28. }