writeFile method

Future<void> writeFile(
  1. String outPath, {
  2. void onProgress(
    1. double progress
    )?,
})

Implementation

Future<void> writeFile(
  String outPath, {
  void Function(double progress)? onProgress,
}) async {
  const chunkSize = 1024 * 1024; // 1MB per chunk
  final outFile = File(outPath).openWrite();
  final raf = await File(path).open();

  await raf.setPosition(offset);

  final buffer = Uint8List(chunkSize);
  int remaining = length;
  int written = 0;

  while (remaining > 0) {
    final toRead = remaining > chunkSize ? chunkSize : remaining;
    final read = await raf.readInto(buffer, 0, toRead);
    if (read == 0) break;
    outFile.add(buffer.sublist(0, read));
    remaining -= read;
    written += read;

    //progress
    if (onProgress != null) {
      onProgress(written / length);
    }
  }

  await outFile.close();
  await raf.close();
}