學習flutter
沒多久,因為新的需求涉及到原生,所以需要製作外掛,學習的過程中詳細記錄一下,本篇部落格主要介紹的是iOS
端詳細步驟,不涉及Android
。
原理
個人理解,這種與原生通訊的設計模式都差不多,flutter
這邊的叫Method Channel
。跟之前搞的Cordova
很像,都有一個plugin
類來處理與原生的通訊。
深入理解推薦閱讀Flutter與iOS通訊原理
步驟
建立外掛工程
- Android Studio建立
點選Next,修改
Project
名字繼續Next, 紅框部分選擇是否支援Swift
與Kotlin
。 - 終端建立
flutter create --org com.example --template=plugin 外掛名字
複製程式碼
如果需要支援Swift
或者Kotlin
,
flutter create --template=plugin -i swift -a kotlin 外掛名字
複製程式碼
到這裡,外掛工程就已經建立好了。
目錄結構
android
:安卓外掛程式碼新增的地方
example
:外掛示例工程
ios
:iOS原生程式碼新增的地方
lib
:外掛的Dart程式碼
flutter與原生通訊
Dart
呼叫原生外掛的地方:
編寫iOS原生程式碼
首先需要在example
工程下,執行fLutter build ios
,主要是需要pod install
,生成xxx.workspace
.
然後如下圖所示開啟Xcode,
example
目錄下的ios
目錄開啟也一樣。
Xcode
工程開啟後,在如下圖所示位置新增編寫原生程式碼。
新增檔案或者本地庫
同時在podsepc
檔案裡面加上:
s.source_files = 'Classes/**/*'
s.public_header_files = 'Classes/**/*.h'
# 第三方.a檔案
s.vendored_libraries = 'Classes/**/*.a'
# 第三方framework
s.vendored_frameworks = 'Classes/**/*.framework'
s.dependency 'Flutter'
複製程式碼
更加詳細的podspec
檔案語法,請戳podspec檔案語法
遇到的問題
執行example工程師,一直報library not found
,這個問題還不是一直有,有時候報錯有時候不報錯,尤其Xcode能執行開啟Android Studio執行就顯示找不到庫檔案。搞了好久,請教了很多人,最後發現是Android Studio不能識別大寫Lib開頭的.a檔案,一定要小寫。