Flutter组件/插件开发及发布

一、组件和插件的区别

组件-package: 只包含flutter功能的第三方包/子工程,纯dart开发。
插件-plugin: 用来与原生进行交互,需要开发dart端代码和iOS/Android原生代码。

二、组件开发流程

1.创建package工程

使用AndroidStudio中的Flutter Package工程模板或者命令行:

flutter create -t package test_package

test_package即package的名称。

2.开发

生成的工程里面大致有.idea(工程环境信息),lib(package源代码),test(单元测试代码)等目录结构,通过结构目录我们也可以发现没有plugin工程才有的ios,android,build目录等。我们在lib目录下开发功能。

3.测试

package工程并没有自动创建样例工程,所以可以在工程目录新建exmaple工程用来自测。

flutter create example

然后在example中使用path导入来看功能是否正确实现。

test_package:
  path: ../test_package

4.发布

功能测试正常之后就可以准备发布组件了。

git发布

当然如果没有私有Pub,但又不想把组件发布到官方Pub,那么也可以单纯的将代码上传到git,然后通过指定git地址来使用。

test_package:
    git:
      url: 'git url'
      ref: 'tag'
发布到官方Pub

发布到Pub,我们需要在yaml文件修改相关的信息,添加version、homepage等。

name: test_package
description: A new Flutter package project.
version: 0.0.1
author: test <test@gmail.com>
homepage: http://gitlab.com/test/test_package

正式发布前先使用命令校验:

pub publish --dry-run

配置信息正常的话就不会有提示,否则的话按照提示修改即可。

比较常见的问题有:

author后必须带个email地址。
CHANGELOG.md中必须包含yaml中的版本号。
Your package is 241.9 MB. Hosted packages must be smaller than 100 MB.

前两个问题按要求修改即可,第三个问题这是因为发布时会将目录代码打包,因此example运行过之后build目录体积过大,所以删除example的build运行目录。

由于发布到pub需要科学上网,所以事先弄好相关软件,类似ClashX,然后复制终端代理命令 去终端进行执行。

export https_proxy=http://127.0.0.1:7890;export http_proxy=http://127.0.0.1:7890;export all_proxy=socks5h://127.0.0.1:7891

之后使用 curl google.com 看命令行是不是也能够翻墙了,如果输出html形式的文本就说明可以了。

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

网络处理正常后,执行以下指令:

flutter packages pub publish --server=https://pub.dartlang.org

第一次发布需要copy地址到google浏览器进行认证。
确认成功之后,就可以发布到pub了。

发布成功之后就可以在我们的flutter工程使用 pubspec.yaml 导入了我们的插件了。

test_package: ^0.0.1
发布到私有Pub

首先,需要有一个私有Pub服务。具体如何搭建可以查看另一篇文章。

然后,在组件的pubspec.yaml文件中配置私有pub地址。

name: test_package
description: A new Flutter package project.
version: 0.0.2
author: test
homepage: http://gitlab.com/test_package
publish_to: http://192.168.44.222:8090

publish_to就是私有Pub的ip地址及端口。

最后执行命令:

flutter packages pub publish

或者

pub publish

最后看到成功提示:

Uploading...
Successfully uploaded package.

三、插件开发流程

1.创建插件工程

flutter create -i objc -t plugin test_plugin

-i objc参数是指iOS代码使用ObjC语言,如果选择使用Swift,则无需添加此参数。

2.开发

生成的工程里面同样有.idea(工程环境信息),lib(package源代码),test(单元测试代码)等目录结构;除此之外还有ios(iOS端代码),android(Android端代码),example(示例程序)等目录。

插件的功能我们需要在lib/ios/android三个目录下开发。

插件主要是通过MethodChannel在Dart代码和原生代码之间通信,业务代码分别在lib/test_plugin.dart、ios/Classes/TestPlugin.m、android/src/mian/kotlin/com/example/test_plugin/TestPlugin.kt文件中。只需要参考getPlatformVersion接口方法的实现逻辑增加自己的业务代码即可。

3.测试

插件的默认工程模板中包含了example,所以只需要直接在该目录中编写测试代码即可。

安卓工程可以使用AndroidStudio打开运行,而iOS工程则需要先在example/ios目录下执行pod install安装依赖,然后再使用Xcode打开工程并运行。

工程运行起来之后,就可以在example/lib目录中编写测试代码了。

4.发布

插件的发布方法和组件相同,具体请参照组件。

参考文档

Flutter Pub私有仓库搭建及使用