在上一篇分享的文章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能够分为两种:纯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就是第二种。
官方推荐的作法使用命令行建立一个package。
首先是建立一个dart package,这里很少作讲述很简单,执行如下命令便可。
$ flutter create --template=package hello
咱们使用以下命令建立一个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
这个文件。
当你写完了本身的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…