我需要在列表中显示100张图像。我不想对所有名称进行硬编码。
如何获取图像名称?
我想要一个这样的代码:
final List<String> imageNames = await WhatEver.getNamesOfImagesInAssetsDirectory();
final widgets = imageNames.map((fileName) => Image.asset('images/${fileName}.png')).toList()
答案 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
中添加的所有资产的所有数据