如何在Flutter Web中读写文件?

ijxebb2r  于 2022-12-27  发布在  Flutter
关注(0)|答案(4)|浏览(254)

我在flutter-web上工作,我想在flutter-web上做文件操作(读和写)。对于Android和IOS,我使用path_provider依赖。但是在flutter-web上,它不受支持。
有人能帮我吗?

hmae6n7t

hmae6n7t1#

可接受的答案并不完全正确。是的,dart:io在网络上不可用,但它仍然可以读取文件。您可以通过系统的文件选择器选择一个文件,然后读取它。“写入”文件的一个简单选项是向用户发送自动下载。

读取

使用此库选择文件:pub.dev/packages/file_picker(Web迁移指南)

import 'dart:html' as webFile;
import 'package:file_picker_web/file_picker_web.dart' as webPicker;

if (kIsWeb) {
   final webFile.File file = await webPicker.FilePicker.getFile(
      allowedExtensions: ['pd'],
      type: FileType.custom,
   );
  
   final reader = webFile.FileReader();
   reader.readAsText(file);

   await reader.onLoad.first;

   String data = reader.result;
}

编写(也称为下载):

import 'dart:html' as webFile;

if (kIsWeb) {
   var blob = webFile.Blob(["data"], 'text/plain', 'native');

   var anchorElement = webFile.AnchorElement(
      href: webFile.Url.createObjectUrlFromBlob(blob).toString(),
   )..setAttribute("download", "data.txt")..click();
}
ruoxqz4g

ruoxqz4g2#

在dart文档中已经解释过了... dart:io对web build是不可用的...这意味着你不能直接访问flutter web中的系统文件. build将失败..你需要删除代码以便运行它
这是一个安全问题.. js不允许它太..想象一下一个网站,可以读取您所有的系统文件,如果你访问它..这就是为什么像路径阅读或文件读取是不允许的..它去相同的flutter
我希望你有答案

ehxuflar

ehxuflar3#

在Flutter Web出现之前,我专门为此创建了一个包。https://pub.dev/packages/async_resource
它将事物视为网络资源(通常通过HTTP)或本地资源,如文件、本地存储、服务工作者缓存或共享首选项。
这不是世界上最容易的事情,但它的工作。

hgtggwj0

hgtggwj04#

那么“dart:indexed_db library”呢?您可以使用IndexedDB存储结构化数据,如图像、数组和Map。“Window.localStorage”只能存储字符串。
dart:indexed_db
Window.localStorage

相关问题