在上一篇分享的文章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…