我有 100 张图片需要显示在列表中。我不想对所有名称进行硬编码。
如何获取图像的名称?
我想要这样的代码:
final List<String> imageNames = await WhatEver.getNamesOfImagesInAssetsDirectory();
final widgets = imageNames.map((fileName) => Image.asset('images/${fileName}.png')).toList()
Run Code Online (Sandbox Code Playgroud)
Kos*_*dov 39
我已经在一个内部实现了下面的功能 StatefulWidget
Future _initImages() 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/'))
.where((String key) => key.contains('.svg'))
.toList();
setState(() {
someImages = imagePaths;
});
}
Run Code Online (Sandbox Code Playgroud)
AssetManifest.json
包含有关您添加的所有资产的所有数据 pubspec.yaml
小智 8
“AssetManifest.json”很快就会被弃用,并将替换为“AssetManifest.bin”。
但我相信它仍然没有记录。如果您使用的是较新的 Flutter 版本(请参阅更新链接),有一个 api 可以获取资产列表,如下所示:
final assetManifest = await AssetManifest.loadFromAssetBundle(rootBundle);
// This returns a List<String> with all your images
final imageAssetsList = assetManifest.listAssets().where((string) => string.startsWith("assets/images/")).toList()
Run Code Online (Sandbox Code Playgroud)
在 Flutter Channel 稳定版 3.10.6 上测试
相关链接/github跟踪:
通过以二进制而不是 JSON 编码资产清单来加速首次资产加载
归档时间: |
|
查看次数: |
8288 次 |
最近记录: |