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,按照以下步骤进行:

  1. 首先把“play.png”这张图片放在'player/lib/assets/play.png'目录下;

  2. 然后在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),

        也可以达到同样的效果。


可以按照这个步骤尝试一下,如果还有问题,欢迎给我留言~

1
0

基于Flutter 3.x 实战跨平台仿抖音App混合开发

以短视频APP为例,快速上手原生/Flutter 混合开发

481 学习 · 120 问题

查看课程