saveAs function

Future<String?> saveAs(
  1. UStorageBackend backend,
  2. String sourcePath,
  3. String fileName, {
  4. String? mimeType,
})

Implementation

Future<String?> saveAs(UStorageBackend backend, String sourcePath, String fileName, {String? mimeType}) async {
  if (!web.window.has("showSaveFilePicker")) return publishToDownloads(backend, sourcePath, fileName, mimeType: mimeType);
  try {
    final JSObject options = JSObject()..["suggestedName"] = fileName.toJS;
    final JSObject handle = await web.window.callMethod<JSPromise<JSObject>>("showSaveFilePicker".toJS, options).toDart;
    final JSObject writable = await handle.callMethod<JSPromise<JSObject>>("createWritable".toJS).toDart;
    await for (final Uint8List chunk in backend.read(sourcePath)) {
      await writable.callMethod<JSPromise<JSAny?>>("write".toJS, chunk.toJS).toDart;
    }
    await writable.callMethod<JSPromise<JSAny?>>("close".toJS).toDart;
    await backend.delete(sourcePath);
    return fileName;
  } catch (_) {
    // AbortError: the user dismissed the picker.
    return null;
  }
}