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<List<int>> finalize() {
    final byteStream = super.finalize();

    final total = length;
    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 stream;
  }
}