You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:03:37