學習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 外掛名字
複製程式碼
到這裡,外掛工程就已經建立好了。
目錄結構
![外掛工程目錄](https://i.iter01.com/images/42d0be1f6a098dafdf96a55531b16cf067bf2631194e94c72a5a8811f248869f.png)
android
:安卓外掛程式碼新增的地方
example
:外掛示例工程
ios
:iOS原生程式碼新增的地方
lib
:外掛的Dart程式碼
flutter與原生通訊
Dart
呼叫原生外掛的地方:
![Dart呼叫原生](https://i.iter01.com/images/61a591672eb2be77237978c974a179435580db2b0e6f82a31dd35e4a1474a1ee.png)
![原生接收通訊](https://i.iter01.com/images/c917f64d2d3c3118495784fd0c31ae6778a0be9a74062dddeef33382252c0ccf.png)
![FlutterMethodCall](https://i.iter01.com/images/e91a847f0c382b3d0e0c3c51020f25b593acdc4693e146c39f63eb7b44abd027.png)
編寫iOS原生程式碼
首先需要在example
工程下,執行fLutter build ios
,主要是需要pod install
,生成xxx.workspace
.
然後如下圖所示開啟Xcode,
![使用Xcode開啟工程](https://i.iter01.com/images/da95bf2fef537187bace8868592e60d4047014f7dd2c6253748fdd164e9de5a5.png)
example
目錄下的ios
目錄開啟也一樣。
Xcode
工程開啟後,在如下圖所示位置新增編寫原生程式碼。
![新增iOS程式碼的位置](https://i.iter01.com/images/dac55f51cd60f68219db87451dee8dc86a45215eb13bb20230f2e28eb6ac484c.png)
新增檔案或者本地庫
![新增檔案](https://i.iter01.com/images/874eab972d668f0a67d45435aab5c1424d59854e4b18753309da1bf77a676c20.png)
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檔案](https://i.iter01.com/images/f2c32e9c07aaed35be1c6ee5b2b3ce72a09f6517eaf9ca54eda506aa56773424.png)
podspec
檔案語法,請戳podspec檔案語法
遇到的問題
執行example工程師,一直報library not found
,這個問題還不是一直有,有時候報錯有時候不報錯,尤其Xcode能執行開啟Android Studio執行就顯示找不到庫檔案。搞了好久,請教了很多人,最後發現是Android Studio不能識別大寫Lib開頭的.a檔案,一定要小寫。