嘿,我的资产文件夹中有很多图像,我使用以下代码来获取图像列表
...
List<String> imagesList;
Future _initImages() async {
final manifestContent =
await DefaultAssetBundle.of(context).loadString('AssetManifest.json');
final Map<String, dynamic> manifestMap = json.decode(manifestContent);
final imagePaths = manifestMap.keys
.where((String key) => key.contains('images/')) // mention folder where all images exists
.toList();
print('imagePath ${imagePaths.length}');
setState(() {
imagesList = imagePaths;
});
}
void initState() {
// TODO: implement initState
super.initState();
_initImages();
}
...
所以问题是我的图像名称包含空格,在打印我的 imagePaths 时,我得到类似这样的路径
' my%20image%20.jpg '
这意味着我认为它无法计算空白,当我将此路径提供给 Image 时,它会给出无法加载资产错误。有什么解决办法吗?
其中一张图像的路径:
assets/images/my image.jpg
这里的问题是空间。如果路径是:
“资产/图像/我的图像.jpg”
由于空格,您得到的路径为
“资产/图像/my%20image.jpg”
在 flutter 中将 Image.asset 的路径指定为
Image.asset("资产/图像/我的图像.jpg"),
将渲染图像。
但是 Image.asset("assets/images/my%20image.jpg"),会抛出错误。
因此,在将所有路径附加到列表之前,请确保删除所有 %20,然后将路径附加到列表。
为此,您可以使用https://api.dart.dev/stable/2.8.4/dart-core/String/replaceAll.html https://api.dart.dev/stable/2.8.4/dart-core/String/replaceAll.html
Example:
String path = "assets/images/my%20myimage%20spacex%20launchAmerica.png";
String newpath = path.replaceAll("%20", " ");
print("NewValidPath is : $newpath");
Output:
新的有效路径是:assets/images/my image spacex launch America.png
现在,这是一条有效的路径。因此这将渲染图像。
编辑:根据您的情况,您可以执行以下操作:
var pathList = manifestMap.keys.toList();
for(int i=0;i<pathList.length;i++){
pathList[i]=pathList[i].replaceAll("%20", " ");
}
setState((){
imagesList=pathList;
});
我希望这有帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)