1234567891011121314151617181920212223242526272829303132333435 |
- 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<int> data, EventSink<List<int>> sink) {
- bytes += data.length;
- onProgress(bytes, total);
- if (total >= bytes) {
- sink.add(data);
- }
- },
- );
- final stream = byteStream.transform(t);
- return http.ByteStream(stream);
- }
- }
|