Flutter中AssetImage加载默认图片失败,报FileSystemException错误求助
问题解决步骤
1. 排查数据库字段值异常
错误提示path = 'test',说明代码走到了FileImage分支,但该路径不存在。大概率是数据库中img字段并非null,而是存了无效字符串(比如'test'),导致listContacts[index].img != null判断为真,去加载不存在的文件。
解决:
- 先打印
listContacts[index].img的实际值,确认是否为null或有效路径。 - 修改判断逻辑,同时检查字符串是否为空:
image: listContacts[index].img?.trim().isNotEmpty == true ? FileImage(File(listContacts[index].img!)) : const AssetImage('assets/imgs/img.png'),
2. 确认资源文件配置
使用AssetImage必须在pubspec.yaml中正确声明资源,否则Flutter找不到图片:
flutter: assets: - assets/imgs/img.png
注意缩进要和flutter:对齐,配置后重启项目生效。
3. 移除不必要的类型转换
AssetImage本身就是ImageProvider的子类,不需要强制转换as ImageProvider,直接使用即可,避免潜在类型错误。
4. 单独测试默认图片
先把代码临时改成只加载默认图,确认资源能正常显示:
image: const AssetImage('assets/imgs/img.png'),
如果能显示,再整合分支逻辑,逐步排查问题。
修正后的完整代码示例
Widget cardContacts(BuildContext context, int index) { return GestureDetector( child: Padding( padding: const EdgeInsets.all(10), child: Row( children: <Widget>[ Container( height: 80, width: 80, decoration: BoxDecoration( shape: BoxShape.circle, image: DecorationImage( image: listContacts[index].img?.trim().isNotEmpty == true ? FileImage(File(listContacts[index].img!)) : const AssetImage('assets/imgs/img.png'), fit: BoxFit.cover, ), ), ), const SizedBox(width: 10), // 用SizedBox替代空Padding更规范 Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Text(listContacts[index].name!), Text(listContacts[index].email!), Text(listContacts[index].phone!), ], ) ], ), ), ); }
内容的提问来源于stack exchange,提问作者Nathanael Santos
相关产品推荐
相关产品推荐

