Flutter:如何获取“资产”目录中所有图像的名称列表?

时间:2019-06-11 12:51:48

标签: flutter dart

我需要在列表中显示100张图像。我不想对所有名称进行硬编码。

如何获取图像名称?

我想要一个这样的代码:

final List<String> imageNames = await WhatEver.getNamesOfImagesInAssetsDirectory();
final widgets = imageNames.map((fileName) => Image.asset('images/${fileName}.png')).toList()

2 个答案:

答案 0 :(得分:0)

您可以使用方法Directory.listSync()轻松获得目录中所有图像的名称。但是,似乎无法获得资产目录路径,如here所述。

一种解决方案是将所有图像复制到一个目录中,因此您可以使用listSync(),但由于方法rootBundle.load()(您可以使用必须使用来获取图像数据,以便您可以复制它)需要图像的路径。

因此,简而言之,我认为不可能做到这一点。

答案 1 :(得分:0)

我已经在StatefullWidget中实现了以下功能:

Future _initAvatars() async {
  // >> To get paths you need these 2 lines
  final manifestContent = await DefaultAssetBundle.of(context).loadString('AssetManifest.json');

  final Map<String, dynamic> manifestMap = json.decode(manifestContent);
  // >> To get paths you need these 2 lines

  final imagePaths = manifestMap.keys
      .where((String key) => key.contains('images/avatars/'))
      .where((String key) => key.contains('.svg'))
      .toList();

  setState(() {
    avatars = imagePaths;
  });
}

AssetManifest.json包含有关您在pubspec.yaml中添加的所有资产的所有数据