前面,我們對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 其實我是可以訪問外網,網頁是可以開啟,於是我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上已經可以搜到了