我在flutter-web上工作,我想在flutter-web上做文件操作(读和写)。对于Android和IOS,我使用path_provider依赖。但是在flutter-web上,它不受支持。有人能帮我吗?
path_provider
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(); }
ruoxqz4g2#
在dart文档中已经解释过了... dart:io对web build是不可用的...这意味着你不能直接访问flutter web中的系统文件. build将失败..你需要删除代码以便运行它这是一个安全问题.. js不允许它太..想象一下一个网站,可以读取您所有的系统文件,如果你访问它..这就是为什么像路径阅读或文件读取是不允许的..它去相同的flutter我希望你有答案
ehxuflar3#
在Flutter Web出现之前,我专门为此创建了一个包。https://pub.dev/packages/async_resource它将事物视为网络资源(通常通过HTTP)或本地资源,如文件、本地存储、服务工作者缓存或共享首选项。这不是世界上最容易的事情,但它的工作。
hgtggwj04#
那么“dart:indexed_db library”呢?您可以使用IndexedDB存储结构化数据,如图像、数组和Map。“Window.localStorage”只能存储字符串。dart:indexed_dbWindow.localStorage
4条答案
按热度按时间hmae6n7t1#
可接受的答案并不完全正确。是的,dart:io在网络上不可用,但它仍然可以读取文件。您可以通过系统的文件选择器选择一个文件,然后读取它。“写入”文件的一个简单选项是向用户发送自动下载。
读取:
使用此库选择文件:pub.dev/packages/file_picker(Web迁移指南)
编写(也称为下载):
ruoxqz4g2#
在dart文档中已经解释过了... dart:io对web build是不可用的...这意味着你不能直接访问flutter web中的系统文件. build将失败..你需要删除代码以便运行它
这是一个安全问题.. js不允许它太..想象一下一个网站,可以读取您所有的系统文件,如果你访问它..这就是为什么像路径阅读或文件读取是不允许的..它去相同的flutter
我希望你有答案
ehxuflar3#
在Flutter Web出现之前,我专门为此创建了一个包。https://pub.dev/packages/async_resource
它将事物视为网络资源(通常通过HTTP)或本地资源,如文件、本地存储、服务工作者缓存或共享首选项。
这不是世界上最容易的事情,但它的工作。
hgtggwj04#
那么“dart:indexed_db library”呢?您可以使用IndexedDB存储结构化数据,如图像、数组和Map。“Window.localStorage”只能存储字符串。
dart:indexed_db
Window.localStorage