当前位置:  开发笔记 > 编程语言 > 正文

颤动 - 从资产中读取文本文件

如何解决《颤动-从资产中读取文本文件》经验,为你挑选了2个好方法。

我有一个文本文件(.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 getFileData(String path) async {
  return await rootBundle.loadString(path);
}

要获得实际数据,请执行以下操作:

String data = await getFileData(fileName);

但是,当我使用fileNamelike时'assets/res/my_file.txt',我收到一个错误:Unable to load asset: assets/res/my_file.txt.

值得注意的是,我正试图通过单元测试来做到这一点.关于如何正确地做到这一点的任何想法?谢谢!



1> Suragch..:

对于将来的访客,这是一个更完整的答案。

创建资产文件夹

在项目的根文件夹中创建一个资产文件夹。在Android Studio中,您可以右键单击“项目”大纲,然后转到“ 新建”>“目录”

您可以根据需要为文本文件创建另一个子文件夹assets。但是,如果这样做,则必须在pubspec.yaml中包括相对路径。见下文。

将文本文件添加到新文件夹

您可以将文本文件复制到assets目录中。的相对路径my_file.txt为例如assets/my_file.txt

在pubspec.yaml中注册资产文件夹

打开项目根目录中的pubspec.yaml文件。

如下所示,将资产子部分添加到flutter部分:

flutter:
  assets:
    - assets/my_file.txt

如果要包含多个文件,则可以不使用文件名,而只使用目录名(包括最后的/):

flutter:
  assets:
    - assets/

获取代码中的文本

您可以使用全局rootBundle来获取文本文件资产:

import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;

Future loadAsset() async {
  return await rootBundle.loadString('assets/my_text.txt');
}

或者,如果您具有BuildContext(在小部件内部),则可以使用DefaultAssetBundle。推荐这样做是因为它允许在运行时切换资产包,这对于多语言资产很有用。

Future loadAsset(BuildContext context) async {
  return await DefaultAssetBundle.of(context).loadString('assets/my_text.txt');
}

也可以看看

载入文字资产

如何在应用程序中包含图像



2> Collin Jacks..:

文件夹名称"assets"不会神奇地添加.更新您的pubspec.yaml以包含资产的完整路径.

flutter:
  assets:
    - assets/res/my_file.txt

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有