一、导言
我们在创建一个Flutter项目的时候,有如下几种选择:
- Application就是新建一个标准的Flutter工程;
- Module用于在原生工程中去包含Flutter模块,我在《Flutter与原生工程的混合开发》中有过详细介绍;
- Package用于纯Dart的组件开发,可以将其理解成是一个Widget,我在《发布package到pub.dev》中做了详细介绍;
- Plugin用于与原生交互的插件开发,里面既包含安卓代码,也包含iOS代码。
二、plugin开发流程的简单介绍
实际上,Plugin就是一个特殊的Package。Package是一个纯Dart包,它里面封装了一个纯Dart的功能组件,可以将其理解成是一个Widget;而Plugin是提供的对Android或者iOS功能的封装,它是在Flutter层面提供前述组件功能,使Flutter可以较为方便地调取Native的相关功能模块。
在Plugin中,Flutter代码和Native代码之间的通讯是通过Channel来进行的。
上面说了,Plugin是一种特殊的package,所以Plugin的创建和发布的流程大致跟Package的创建和发布的流程是一样的。其中有一个不太一样的地方,我会在下面单独拎出来讲。
1,创建Plugin工程
创建一个Plugin项目的终端目录如下:
代码语言:javascript复制flutter create --template=plugin --platforms android,ios lavie_test_plugin
- --org com.funshare,用于指定你的组织,并使用反向域名表示法表示。一般用来设置iOS工程的bundleID,以及Android工程的包名
- --platforms android,ios,配置插件的使用平台
- -i swift -a kotlin ,由于Plugin包含iOS和Android代码,而他们分别都支持两种语言,iOS支持Object-C(默认)和Swift,Android支持Java(默认)和Kotlin,所以我们可以使用-i 或 -a 为iOS或Android指定语言。
2,Plugin项目的结构
创建好Plugin项目之后,使用AndroidStudio打开,可以看到项目的组织结构如下:
- android和ios这两个文件夹是我们写原生功能组件代码的地方;
- lib层用于编写Flutter与原生的映射代码,因为Flutter与原生是不能直接通信的,必须要通过MethodChannel来间接调用;
- example文件夹是示例工程,我们编写的插件可以直接在示例工程中进行验证。
以上。