Flutter插件编写及发布流程

1,825 阅读2分钟

前面,我们对ios项目基本已经有了大概的认识,现在来开发一个flutter插件,来调用android和ios的原生api。 flutter插件与原生通讯主要是通过channel,底层是通过二进制在传输数据。 类似的跨平台Hbrid和RN等js语言的与原生通讯的JSBridge。

我们现在创建一个插件,已获取手机电量为例子。

create.png

create2.png

我们来看一下插件工程的项目结构

struct.png

接着先看下android端的实现

android.png

ios端需要先加载pod

ios1.png ios2.png

ios3.png

ios4.png

在这个过程中发现了一个问题,就是swift调用oc的方法时,方法名会部分被省略掉。

ios5.png 最后慢慢了解到,oc的方法名其实很多都是后半部分都是带有第一个参数名形式的, 0.png 就像这个注册插件的方法registerWithRegistrar with后面往往接的是第一个参数,swift可能 是为了增加方法可读性,应该是有根据某种规律来检测判断是否省略。

####上面flutter插件的两端就实现了,我们来run一下看看结果 result.png

好的那么插件写好了,当然是可以传到GitHub共享出来。但是就像android可以发布aar一样,flutter的 插件都可以发布在 pub上面。

我们先执行下命令,检测是否符合发布规则, flutter packages pub publish --dry-run

提示没有填写homepage或repositor(简单理解为就是git源码),并且体积过大。 上传到github,然后clean下项目,删掉build项目。 继续执行检测命令 author.png 这个我么把yaml里面作者这一栏删掉即可 执行最终发布命令 flutter packages pub publishsudo flutter packages pub publish -v
flutter packages pub publish --server=https://pub.dartlang.org

fail.png 失败了 访问不到ping accounts.google 其实我是可以访问外网,网页是可以打开,于是我ping了下 ping.png 可以看到 命令行是访问不到google的。需要设置命令行代理。

@harrychen ➜ flutter_plugin_battery git:(master) ✗ export http_proxy=http://127.0.0.1:9999 @harrychen ➜ flutter_plugin_battery git:(master) ✗ export https_proxy=http://127.0.0.1:9999 @harrychen ➜ flutter_plugin_battery git:(master) ✗ set https_proxy=https://127.0.0.1:9999 @harrychen ➜ flutter_plugin_battery git:(master) ✗ set http_proxy=http://127.0.0.1:9999

特别注意,每个代理的端口不一样,不要直接复制,一定要看清自己的代理端口,这个9999 是我自己代理端口!!!! bashprofile.png 还需要注释国内镜像。上传完了自己再放开

success.png

终于成功了,可以看到pub上已经可以搜到了 pub.png show.png