【问题标题】:Flutter read all files from asset folderFlutter 从资产文件夹中读取所有文件
【发布时间】:2020-03-03 12:35:38
【问题描述】:

我有一个资产文件夹,其中有一个选项卡文件夹,然后是一个文件夹列表,每个文件夹都包含一些文件

现在我想读取 tabs 文件夹中所有文件夹的名称以及 tabs 文件夹的每个子文件夹中的所有文件,即名为 sound 1、sound 2、sound 3 的文件夹。 ...

简单来说,我想读取我的assets文件夹中所有文件和文件夹名称。请任何人帮助。 谢谢,

【问题讨论】:

  • 嗨,到目前为止,您尝试了什么?
  • 嗨,我尝试过使用path_provider 库,但它不起作用。它通过异常。当我在某处读到该文件包含有关每个资产的信息时,我在 AssetManifest.json 中查找,但它似乎只包含我们在 pubspec.yaml 中输入的信息。我不想将所有文件路径添加到 pubspec.yaml。我添加了assets: - assets/ 以获取所有可在我的代码中使用的文件。现在,我需要列表或地图中的每个文件路径,而无需在我的代码中对它们进行硬编码,这样我就可以遍历它们并在 ListView 中显示它们。谢谢
  • 这个问题你解决了吗?我遇到了和你一样的事情
  • 我必须对字符串进行硬编码。但我还没有尝试过@Spatz 的回答。你可以试试。
  • 我想列出 /assets/images/wallpapers/ 目录下的所有图片,并将它们存储在 List 类型的变量中以供进一步使用,我该怎么做?

标签: android ios flutter dart cross-platform


【解决方案1】:

即使您仅在 pubspec.yaml 中指定了资产文件夹,flutter 编译器也会在 AssetManifest.json 文件中列出这些文件夹中的所有文件。我们所要做的就是阅读这个文件:

final manifestJson = await DefaultAssetBundle.of(context).loadString('AssetManifest.json');
final images = json.decode(manifestJson).keys.where((String key) => key.startsWith('assets/images'));

【讨论】:

  • 我试过了,但这个文件似乎包含我们在 pubspec.yaml 中输入的信息。所以,我不想在清单中输入所有资产名称。
  • @Taha Malik 您必须在 pubspec.yaml 中仅放置文件夹名称(带有斜杠),而不是资产文件名。
  • 可以通过这种方式在没有上下文的情况下使用final manifestJson = await rootBundle.loadString('AssetManifest.json')
【解决方案2】:

最简单的方法是,打开您的 pubspec.yaml 并在 assets 行中进行更改,如下所示 - 只需添加整个文件夹。

assets:
  - assets/

这将添加资产文件夹中的所有文件夹和文件。

【讨论】:

  • 我在做:assets: - assets/ 它也得到了所有没有 * 的文件。这仅允许在您的应用程序中使用资产。我们仍然必须知道每个文件和目录的名称并将它们硬编码到我们的代码中。我想要的是我想要一个迭代解决方案,即我不知道资产文件夹中有多少文件或文件夹,只需获取所有文件路径并在列表中显示所有文件。
【解决方案3】:

我有同样的问题,

截至 2021 年 9 月,如果不在调用之前手动将其列在 pubspec.yaml 中,仍然无法获取所有资产

final manifestJson = await DefaultAssetBundle.of(context).loadString('AssetManifest.json');

但是,如果您使用的是 Android Studio/IntelliJ,则有解决方法 你可以安装 https://plugins.jetbrains.com/plugin/13629-flutter-assets-ref-generator

然后您可以使用它一键将您的所有资产文件列出到pubspec.yaml

它为我解决了问题。

【讨论】:

    【解决方案4】:

    根据 Flutter 官方的说法,它们现在提供了在目录中插入所有文件的通用方法。

    flutter:
      assets:
        - directory/
        - directory/sub_directory/
    

    参考:https://docs.flutter.dev/development/ui/assets-and-images

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      相关资源
      最近更新 更多