从头开发一个Flutter插件(一)开发流程

文章由来

在上一篇分享的文章Flutter 天气应用里我介绍了一个用flutter编写的天气预报app,里面有一个须要完善的功能就是根据当前定位所在城市显示天气信息。因为没有办法使用gms(google mobile service)的缘故,flutter官方提供的基于Google map的定位package没有办法直接引入到项目中使用,所以我就想到基于高德地图的sdk来作一款相同的插件,既能够为天气app服务,也能够之后在其余项目里直接拿来使用。java

再者就是知足一下能本身发一个flutter package的小愿望。android

插件介绍

在flutter中,一个插件叫作一个package,使用packages的目的就是为了达到模块化,能够建立出可被复用和共享的代码,这和大多数编程语言中的模块、包的概念相同。建立出来的package能够在pubspec.yaml中直接依赖。ios

一个最小化的package包含了两部分:git

  • 一个pubspec.yaml文件:一个元数据文件,声明了声明了package的名称、版本、做者等信息。github

  • 一个lib文件夹:包含里package的公开代码,文件夹至少须要存在<pakcage-name>.dart这个文件。objective-c

注意:<pakcage-name>.dart这个文件必须存在,由于这是方便使用的人快速import这个package来使用它,能够把它理解成一种必需要遵照的规则。编程

package的种类

package能够分为两种:纯dart代码的package和带有特定平台代码的package。swift

  • Dart packages:这是一个只有dart代码的package,里面包含了flutter的特定功能,因此它依赖于flutter的framework,也决定了它只能用在flutter上。api

  • plugin packages:这是一个既包含了dart代码编写的api,又包含了平台(Android/IOS)特定实现的package,能够被Android和ios调用。app

上面应该很好理解,能够理解成java jar包和Android sdk的区别。而要开发的定位package就是第二种。

开发plugin pakcage实践

官方推荐的作法使用命令行建立一个package。

首先是建立一个dart package,这里很少作讲述很简单,执行如下命令便可。

$ flutter create --template=package hello

建立plugin package

咱们使用以下命令建立一个plugin package,template选择了plugin:

$ flutter create --org com.kinsomy --template=plugin amap_location_plugin

默认状况下,建立的plugin项目是使用objective-c(ios)和java(Android)编写,若是须要增长对swift和kotlin的支持,能够在命令中添加 -i 和 -a。

$ flutter create --org com.kinsomy --template=plugin amap_location_plugin -i swift -a kotlin hello

由于我是用Android studio开发,所以也能够用Android studio直接建立:选择新建FLutter project,而后选择plugin project便可。swift和kotlin的支持在建立界面上勾选便可。

项目结构

建立完成后看到整个plugin项目的结构:

  • lib/amap_location_plugin.dart 这是plugin package中dart api的代码部分,是供使用者在他们本身的flutter项目中调用的接口代码。

  • AmapLocationPlugin.java 这是plugin package中Android部分的具体实现,要和上面的dart api配合进行开发。

  • ios/ 这里是plugin package ios部分的具体实现,和上面Android实现相似,编写ios平台特定代码。

  • example/ 这是用来讲明使用plugin package的示例代码,里面源码依赖了写好的plugin。

代码实现

细节会在下一篇文章中详细讲述。

先贴上代码仓库地址 github.com/KinsomyJS/l…

目前个人plugin只针对Android平台开发。对于plugin项目我须要同时编写java代码和dart代码,java代码写在android/src/main/java/com/green/kinsomy/application目录下,主要工做是接入高德定位sdk,同时和dart代码进行交互,dart代码则在lib目录下编写,再次提醒文件夹内至少须要存在<pakcage-name>.dart这个文件。

发布packages

当你写完了本身的plugin项目,而且测试经过后,就能够发布出去供其余人使用,最好在example里面编写示例代码。

在发布以前,检查pubspec.yaml、README.md以及CHANGELOG.md文件,pubspec.yaml内的做者,版本号,名称等信息是必填的,README.md文档则是描述你的plugin的用处和使用方法,CHANGELOG.md记录的版本的迭代信息。

全部的工做都完成以后,运行命令检check是否是都完整。

$ flutter packages pub publish --dry-run

若是全部工做无误的话,就能够执行发布命令了。

$ flutter packages pub publish

而后你就能够在pub库里面搜索本身发布的package名称找到他。

能够在package主页上看到一个分数标志,在哪里会告诉你如何提升你的分数,好比提供更加详细的说明以及完整的使用文档等等。

github项目地址: github.com/KinsomyJS/l…

参考文档

  1. Developing Packages & Plugins

  2. flutter/plugins git仓库

  3. Dart packages

相关文章
相关标签/搜索