write method

  1. @override
Future<String> write({
  1. required String fileName,
  2. required String contents,
  3. String? mimeType,
})
override

Implementation

@override
Future<String> write({
  required String fileName,
  required String contents,
  String? mimeType,
}) async {
  final directory = Directory(directoryPath);
  await directory.create(recursive: true);
  final safeName = sanitizeExportFileName(fileName);
  var destination = File(path_util.join(directory.path, safeName));
  var counter = 1;
  final extension = path_util.extension(safeName);
  final base = path_util.basenameWithoutExtension(safeName);
  while (await destination.exists()) {
    destination = File(
      path_util.join(directory.path, '${base}_$counter$extension'),
    );
    counter += 1;
  }
  final temporary = File('${destination.path}.${const Uuid().v4()}.tmp');
  try {
    await temporary.writeAsString(
      contents,
      encoding: utf8,
      flush: true,
    );
    await temporary.rename(destination.path);
  } finally {
    if (await temporary.exists()) await temporary.delete();
  }
  return destination.path;
}