android - 无法在所有平台上读取Flutter中的文件,该文件在linux桌面上可以看到但web(chrome)看不到它,android也看不到
问题描述
import 'dart:io';
import 'package:path/path.dart';
Future<Map?> readFile(lang) async {
var pathToFile = join(dirname(Platform.script.toFilePath()), 'text', '$lang.toml');
var document = File(pathToFile);
return document;
}
所以我的颤振根目录中有一个文本目录,其中包含一些 TOML 文件,我在 linux 上访问这些文件没有问题,但是一旦我在 android 上运行它,我就会得到一个(OS Error: No such file or directory, errno = 2)
,在 web 上也一样,但没有错误消息,它只是返回null,我也试过这个:
var document = File('text/$lang.toml');
再一次,同样的结果。我见过人们为此使用 path_provider 包,但它无论如何都不起作用,我也希望有网络兼容性。有谁知道如何解决这个问题?泰
解决方案
使用随附的资产时,不应使用主机的文件系统。而是使用rootBundle
from flutter/services
。
import 'package:flutter/services.dart';
...
Future<String> readFile(String lang) {
return rootBundle.loadString('text/$lang.toml');
}
假设该文件位于text/
项目根目录下的目录中,并且定义在pubspec.yaml
:
flutter:
assets:
- text/
它在 Linux 上工作的事实有点巧合,因为您在同一台机器上运行和开发。该解决方案应该独立于您所针对的平台而工作。
推荐阅读
- django - 使用 Ngnix、Django 和 Docker 提供静态文件
- excel - 多个单元格 Vlookup 搜索
- php - 使用 php 生成搜索 URL 并通过 HTML 链接重定向
- java - 如何更新本机构建的 JavaFX 应用程序
- java - Java中的升序数字
- reactjs - 将 componentWillUpdate 与 switch 语句一起使用
- python - 在python中具有平方iverse权重的Knn分类器(权重是一个可调用函数)
- javascript - jquery点击内部链接后获取窗口滚动位置
- vue.js - 从另一个方法访问一个方法并在 Vue 中传递值
- java - JavaFX,Platform.runLater() 问题,Canvas 图形延迟渲染