dart - Flutter - 从 Assets 中读取文本文件

我有一个文本文件 (.txt),我想将其作为以后可以扫描的 Assets 。

在 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);

但是,当我使用像 'assets/res/my_file.txt' 这样的 fileName 时,出现错误:Unable to load assets: assets/res/my_file.txt.

还值得注意的是,我正在尝试通过单元测试来做到这一点。关于如何正确执行此操作的任何想法?谢谢!

最佳答案

这里为 future 的访问者提供更完整的答案。

创建 Assets 文件夹

在项目的根文件夹中创建一个 Assets 文件夹。在 Android Studio 中,您可以右键单击项目大纲并转到 New > Directory

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

将您的文本文件添加到新文件夹中

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

在 pubspec.yaml 中注册 assets 文件夹

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

像这样向 flutter 部分添加一个 Assets 子部分:

flutter:
  assets:
    - assets/my_file.txt

如果您有多个要包含的文件,那么您可以省略文件名而只使用目录名(包括最后的/):

flutter:
  assets:
    - assets/

获取代码中的文字

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

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

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

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

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

另见

  • Loading text assets
  • How to include images in your app

https://stackoverflow.com/questions/44816042/

相关文章:

dart - Flutter - 它在幕后是如何工作的?

dart - 如何在 Flutter 中更改状态栏颜色?

dart - 展开的小部件必须放在 Flex 小部件内

flutter - 如何降级 Flutter SDK (Dart 1.x)

dart - 在 flutter 中使用新关键字

dart - 在底部导航栏图标上显示通知徽章

flutter - 从另一个有状态小部件调用一个有状态小部件中的方法 - Flutter

android - 如何在flutter中获取TextField值

dart - 如何将 JSON Assets 加载到 Flutter 应用程序中?

android - Flutter:适用于 Windows 的 iOS 模拟器