Unable to load asset: asset/image/play.png
来源:9-6 播放器封装及自定义插件(二)

demonCry
2022-09-07
我的图片是放在pluggin包里的, 声明asstes也是在plugin的pubspec.yam里声明的,
然后就会报这个错。。
资源只能放在主工程里吗? 想放在pluggin包里要怎么做呢? 话说 我们写的 VideoView 里的 Image.asset('asset/images/play.png', width: 70, height: 70)
加载的难道不该是pluggin路径下的这个资源吗
1回答
-
马超老师
2022-11-21
首先给出结论,plugin的资源肯定是可以放在plugin里面的。那么为什么你的这个写法会报错呢?
Flutter编译器在处理assets目录时,针对主工程和依赖工程(即不可独立编译的工程,如:plugin、package等)是不一样的。你的写法是按照主工程的写法,Flutter会去主工程查找资源,所以自然是找不到的,也就出现了图中的错误。
按照这个逻辑我们不难推出解决方案,就是:告诉Flutter我们的资源在哪个工程下。
接下来的问题就是怎么告诉Flutter。这里我们的plugin名称是player,按照以下步骤进行:
首先把“play.png”这张图片放在'player/lib/assets/play.png'目录下;
然后在yaml中声明资源路径时需要加上包名前缀:
assets: - packages/player/assets/play.png
这里要注意缩进问题,格式和主工程的配置一样。
3. 在使用的时候加上packages参数,告诉Flutter我们的资源路径,有两种方法:
Image.asset('assets/play.png',package: 'player', width: 70, height: 70),
通过Image.asset方法的“package”参数传入plugin的名称,即可指定资源路径,也可以通过添加uri前缀的方式:
Image.asset('packages/player/assets/play.png', width: 70, height: 70),
也可以达到同样的效果。
可以按照这个步骤尝试一下,如果还有问题,欢迎给我留言~
10
相似问题