Flutter自定义包图片资源加载失败(Unable to load asset)求助
解决Flutter自定义包中图片资源无法加载的问题
你的问题核心是没有指定图片所属的自定义包,Flutter默认会从主项目的资源bundle中查找图片,而自定义包的资源需要明确指定package参数才能访问。以下是具体解决步骤:
1. 修改自定义包内图片引用代码
在showimage.dart中,给Image.asset添加package参数,指定包名showimage:
/* showimage.dart */ library showimage; import 'package:flutter/material.dart'; class ShowImage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Container( margin: const EdgeInsets.fromLTRB(0, 100, 0, 0), child: Center( child: SizedBox( width: 200, // 添加package参数指定资源所属的包 child: Image.asset('assets/images/photo.jpg', package: 'showimage') ), ) ) ); } }
2. 规范自定义包的pubspec.yaml资源配置
虽然你的配置本身没问题,但可以去掉路径开头的./,保持路径写法规范(路径是相对于自定义包根目录的):
# pubspec.yaml (自定义包内的配置) name: showimage description: Displays a photo on the screen. version: 1.0.0 publish_to: 'none' environment: sdk: '>=2.17.6 <3.0.0' dependencies: {flutter: {sdk: flutter}} flutter: uses-material-design: true assets: - assets/images/ # 去掉开头的./
3. 重新构建项目
执行以下命令清理缓存并重新获取依赖,确保资源被正确打包:
flutter clean flutter pub get
之后重新运行项目即可正常显示图片。
原理说明
Flutter在打包时,会将主项目和依赖包的资源分别管理,依赖包的资源会被标记上所属的包名。当使用Image.asset时,如果不指定package参数,Flutter会默认从主项目的资源bundle中查找,自然找不到自定义包内的图片;添加package参数后,Flutter会定位到对应包的资源目录中加载图片。
内容的提问来源于stack exchange,提问作者Mark Tyers
相关产品推荐
相关产品推荐

