我有一个文本文件(.txt),我想将其作为资产,以便稍后扫描。
在pubspec.yaml中,我确保:
flutter:
assets:
- res/my_file.txt
该文件位于我创建的res/
文件夹中,与lib/android/
和ios/
处于同一级别
我正在尝试从自定义类读取文件,而不是小部件。
根据文档,我将使用此导入:
import 'package:flutter/services.dart' show rootBundle;
然后开始这样阅读:
/// Assumes the given path is a text-file-asset.
Future<String> getFileData(String path) async {
return await rootBundle.loadString(path);
}
要获取实际数据,请执行以下操作:
String data = await getFileData(fileName);
但是,当我使用fileName
(如'assets/res/my_file.txt'
)时,我得到一个错误:Unable to load asset: assets/res/my_file.txt
。
同样值得注意的是,我正试图从单元测试中做到这一点。对于如何正确地做到这一点,有什么想法吗?谢谢!
4条答案
按热度按时间4sup72z81#
这里有一个更完整的答案为未来的游客。
创建资产文件夹
在项目的根文件夹中创建一个assets文件夹,在Android Studio中右键单击项目大纲,进入【新建】〉【目录】。
如果你愿意,你可以在
assets
中为文本文件创建另一个子文件夹。但是如果你这样做,你必须在pubspec. yaml中包含相对路径。见下文。将文本文件添加到新文件夹
您可以将文本文件复制到
assets
目录中。例如,my_file.txt
的相对路径为assets/my_file.txt
。注册pubspec.yaml中的assets文件夹
打开项目根目录中的pubspec.yaml文件。
在flutter部分添加一个assets子部分,如下所示:
如果你有多个文件要包含,那么你可以省略文件名,只使用目录名(包括最后的/):
获取代码文本
您可以使用全局
rootBundle
来获取文本文件资源:或者,如果您有BuildContext(在小部件内),则可以使用DefaultAssetBundle。建议使用此方法,因为它允许在运行时切换资产包,这对于多语言资产很有用。
参见
wko9yo5t2#
文件夹名“assets”没有自动添加。请更新您的
pubspec.yaml
以包含资产的完整路径。qco9c6ql3#
在我看来,为了将js文件加载到Flutter中,您应该将其视为文本文件并正确加载。因此,您需要将文件添加到assets文件夹,添加到pubspec文件中,然后加载它。在这里阅读完整答案
第二,你使用了evalJavascript。这个函数可以在许多不同的情况下使用。但是只有当你有一个视图面板时它才能工作。
检查以下示例:
6xfqseft4#
如前所述,下面的代码'文件夹名称'可以给'资产',如果引用资产文件夹或任何其他目录(ex-custom_widget等)在项目中