Flutter无法读取assets/images目录图片的问题求助
项目结构
- assets/
- images/
- movie1.png
- movie2.png
- images/
- lib/
- generated/
- images.dart
- widgets/
- movie_list_widget.dart
- generated/
- spider.yaml
- pubspec.yaml
配置文件内容
spider.yaml
name: MyApp asset_type: images source: - assets/images/ output: lib/generated/images.dart package: my_app
pubspec.yaml
name: my_app description: A new Flutter project. # 其他基础配置省略 flutter: uses-material-design: true assets: - assets/images/
核心代码文件
images.dart(Spider自动生成)
// Generated by Spider 🕷️ class Assets { Assets._(); static const String movie1 = 'assets/images/movie1.png'; static const String movie2 = 'assets/images/movie2.png'; }
movie_list_widget.dart
import 'package:flutter/material.dart'; import '../generated/images.dart'; class MovieListWidget extends StatelessWidget { @override Widget build(BuildContext context) { return ListView( children: [ Image.asset(Assets.movie1), Image.asset(Assets.movie2), ], ); } }
控制台报错示例
The following assertion was thrown resolving an image codec:
Unable to load asset: assets/images/movie1.pngWhen the exception was thrown, this was the stack:
// 堆栈追踪内容省略
排查及解决步骤
校验pubspec.yaml的assets配置
确保assets列表中的- assets/images/末尾带有斜杠,这是Flutter识别目录下所有资源的必要格式;同时检查yaml缩进,assets必须是flutter节点的子项,缩进保持一致(通常为2个空格)。核对Spider生成路径与实际文件
打开images.dart,确认生成的图片路径和assets/images/下的文件名、大小写完全匹配(Dart对文件名大小写敏感,Movie1.png和movie1.png会被判定为不同资源);执行flutter pub run spider build重新生成代码,避免路径拼写错误。清理缓存并重启项目
依次执行flutter clean和flutter pub get,清除Flutter的资源缓存;同时重启IDE/编辑器,避免缓存残留导致资源加载异常。验证图片文件有效性
确认assets/images/目录下存在目标图片,未被误删除;测试手动写入路径是否能加载:将Image.asset(Assets.movie1)替换为Image.asset('assets/images/movie1.png'),如果能正常显示,说明Spider生成的路径存在问题;若仍无法显示,则是资源配置或缓存问题。检查Spider的package配置
确保spider.yaml中的package字段值和pubspec.yaml中的name字段完全一致,不一致会导致资源路径解析失败。
内容的提问来源于stack exchange,提问作者Lll Cilician

