Flutter动态选择加载图片失败:Asset not found异常求助
解决Flutter加载应用内部目录图片报错的问题
问题现象
用户选择图片并复制到应用内部目录后,用Image.asset()加载时报错:
Unable to load asset: /data/user/0/com.my.app/app_flutter/IMG-20230923-WA0001.png Exception: Asset not found
已确认文件确实存在于目标路径,且项目中pubspec.yaml配置的静态资源能正常加载,但动态复制的图片无法通过Image.asset()显示。
问题原因
Image.asset()仅用于加载pubspec.yaml里预先配置好的静态资源(比如项目assets文件夹下的文件),而应用内部目录(通过getApplicationDocumentsDirectory()获取的路径)属于设备本地文件系统路径,不属于Flutter的静态资源体系,因此不能用Image.asset()加载这类文件。
解决方案
改用Image.file()组件加载本地文件系统中的图片,这是专门用于加载设备本地文件的组件。
核心修改
把原来的Image.asset()调用替换成Image.file():
// 原来的错误写法 Image.asset(cardBackgroundPath, fit: BoxFit.cover) // 修改后的正确写法 if (cardBackgroundPath != null) { Image.file(File(cardBackgroundPath), fit: BoxFit.cover) } else { // 图片未选中时显示占位内容 Placeholder(color: Colors.grey) }
可选优化:校验文件存在性
为了避免因文件丢失导致的报错,可以在加载前先检查文件是否存在:
if (cardBackgroundPath != null && File(cardBackgroundPath).existsSync()) { Image.file(File(cardBackgroundPath), fit: BoxFit.cover) } else { Text("图片加载失败") }
额外说明
如果后续需要将本地图片用于网络场景(比如分享链接),可以考虑使用FileImage或者将文件上传至服务器,但当前场景下Image.file()是最直接高效的解决方案。
内容的提问来源于stack exchange,提问作者Ujwal NK
相关产品推荐
相关产品推荐

