在Flutter Web中读取和写入文件

时间:2019-07-24 12:11:14

标签: flutter dart flutter-web

我正在flutter-web上工作,我想在flutter-web中进行文件操作(读取和写入)。 对于Android和IOS,我使用的是path_provider依赖项。但是在flutter-web中不支持。

有人可以帮助我吗?一个例子会更有帮助。

谢谢

4 个答案:

答案 0 :(得分:2)

在Flutter Web诞生之前,我为此专门创建了一个程序包。 https://pub.dev/packages/async_resource

它将内容视为网络资源(通常通过HTTP)或本地资源,例如文件,本地存储,服务工作者缓存或共享首选项。

这不是世界上最简单的事情,但它可以工作。

答案 1 :(得分:2)

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

阅读
使用该库选择文件:pub.dev/packages/file_pickerWeb migration guide

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();
}

答案 2 :(得分:0)

在dart文档中已经进行了解释... dart:io无法用于Web构建...这意味着您不能直接访问Flutter Web中的系统文件。构建将会失败..您需要删除代码才能运行它

这是安全的事情.. js也不允许它..想像一个网站,如果您访问它就可以读取您的所有系统文件..这就是为什么不允许诸如路径读取或文件读取之类的原因..颤抖也一样

希望您有答案

答案 3 :(得分:0)

关于“ dart:indexed_db库”,您可以使用IndexedDB存储结构化数据,例如图像,数组和地图。 “ Window.localStorage”只能存储字符串。

dart:indexed_db

Window.localStorage