美文网首页
Flutter 依赖资源处理

Flutter 依赖资源处理

作者: Howshea | 来源:发表于2019-11-22 14:03 被阅读0次

    最近把一个上周写的 Flutter Module 引入一个 Flutter 项目中作为依赖项,发现一个问题:原先在 Module 中带有文件资源的控件放到其它项目中显示不出来了。经过一番调试确定是打包和路径问题,当我们的项目依赖到另一个项目中的时候,其实类似于 images/xxx.jpg 这样的文件路径其实已经变了,因为 Flutter 的打包过程大致和 Android 是相似的,所有 packages 最终会合并,可能是 Flutter 并没有像 Android 那样的资源文件包名补齐的过程。

    查了很多资料都找不到对应方案,又回头去官网文档里再仔细查一下,最终发现其实官网里写了(😣之前太粗心没认真看),先看一下官网文档里是怎么说的:

    截屏2019-11-22下午2.01.37.png

    文档里说了两个很重要很重要的前提:

    • 把资源文件夹放进 lib/ 里的话,可以直接用,不需要在 pubspec.yaml 中指定
    • 如果要把资源文件打进 package 里给别的项目用,是必须要在 pubspec.yaml 里指定

    现在的问题就是怎么指定路径以及怎么正确地引用到资源文件,文档里似乎没有明说但其实已经给出了对应方案:

    1. 把你的资源文件夹移到 lib/ 里(通常我们是把这些文件放在项目根目录)

    2. 使用特殊的路径规则:packages + 包名 + 文件相对路径,例如你的一个图片 abc.jpg 的完整路径是 flutter_ui/lib/images/2.0x/abc.jpg ,那在 pubspec.yaml 中要写成

      flutter:
        assets:
          - packages/flutter_ui/images/abc.jpg
      

      pubspec.yaml 中指定的资源路径其实相当于一个 key ,所以用的地方也要用同样的 key 才能找到 :

      Image.asset('packages/flutter_ui/images/abc.jpg');
      

      可以看出有三个特殊的规则,一是前面要加一个关键字 packages ,二是 lib 这个路径要忽略掉不写,三是要在文件名前加包名,lib 忽略可以理解,但是前面这个 packages 关键字不是很懂,之后得抽空研究一下 Flutter 的打包流程。

    总之是要好好看文档👻

    相关文章

      网友评论

          本文标题:Flutter 依赖资源处理

          本文链接:https://www.haomeiwen.com/subject/ygafwctx.html