前面,我們對ios項目基本已經有了大概的認識,現在來開發一個flutter插件,來調用android和ios的原生api。
flutter插件與原生通訊主要是通過channel,底層是通過二進制在傳輸數據。
類似的跨平臺Hbrid和RN等js語言的與原生通訊的JSBridge。
我們現在創建一個插件,已獲取手機電量為例子。
我們來看一下插件工程的項目結構
接著先看下android端的實現
ios端需要先加載pod
在這個過程中發現了一個問題,就是swift調用oc的方法時,方法名會部分被省略掉。
最后慢慢了解到,oc的方法名其實很多都是后半部分都是帶有第一個參數名形式的,
就像這個注冊插件的方法registerWithRegistrar with后面往往接的是第一個參數,swift可能
是為了增加方法可讀性,應該是有根據某種規律來檢測判斷是否省略。
上面flutter插件的兩端就實現了,我們來run一下看看結果
好的那么插件寫好了,當然是可以傳到GitHub共享出來。但是就像android可以發布aar一樣,flutter的
插件都可以發布在 pub上面。
我們先執行下命令,檢測是否符合發布規則,
flutter packages pub publish --dry-run
提示沒有填寫homepage或repositor(簡單理解為就是git源碼),并且體積過大。
上傳到github,然后clean下項目,刪掉build項目。 繼續執行檢測命令
這個我么把yaml里面作者這一欄刪掉即可
執行最終發布命令
flutter packages pub publish
或
sudo flutter packages pub publish -v
flutter packages pub publish --server=https://pub.dartlang.org
失敗了 訪問不到ping accounts.google
其實我是FQ了的,網頁是可以打開,于是我ping了下
可以看到 命令行是訪問不到google的。需要設置命令行代理。
@harrychen ? flutter_plugin_battery git:(master) ? export http_proxy=http://127.0.0.1:9999
@harrychen ? flutter_plugin_battery git:(master) ? export https_proxy=http://127.0.0.1:9999
@harrychen ? flutter_plugin_battery git:(master) ? set https_proxy=https://127.0.0.1:9999
@harrychen ? flutter_plugin_battery git:(master) ? set http_proxy=http://127.0.0.1:9999
特別注意,每個代理的端口不一樣,不要直接復制,一定要看清自己的代理端口,這個9999
是我自己代理端口!!!!
還需要注釋國內鏡像。上傳完了自己再放開
終于成功了,可以看到pub上已經可以搜到了