【融雲分析】基於原生代碼開發Flutter 插件

Flutter 是谷歌推出的移動 UI 框架,所使用的開發語言是 Dart,能夠快速在 iOS 和 Android 上構建高質量的原生用戶界面。 Flutter 能夠與現有的代碼一塊兒工做。在全世界,Flutter 正在被愈來愈多的開發者和組織使用,而且它是徹底免費、開源的。android

Flutter 的特色ios

1.快速開發git

毫秒級的熱重載,修改後,應用界面會當即更新。使用豐富的、徹底可定製的 widget 在幾分鐘內構建原生界面。github

2.富有表現力和靈活的 UI服務器

快速發佈聚焦於原生體驗的功能。分層的架構容許徹底自定義,從而實現難以置信的快速渲染和富有表現力、靈活的設計。架構

3.原生的性能app

Flutter 包含了許多核心的 widget,如滾動、導航、圖標和字體等,這些均可以在 iOS 和 Android 上達到原生應用同樣的性能。框架

但還有一個現實的問題:假如咱們有了 iOS 和 Android 的原生 SDK,若是須要 Flutter 版本的,須要咱們從頭開始再構建一遍嗎?性能

答案是不須要,Flutter 能夠和原生代碼交互,支持基於原生代碼開發插件,這樣就能夠經過 Flutter 調用原有 SDK 的接口。字體

基於原生代碼開發 Flutter 插件

1、Flutter 跨平臺原理介紹

下圖是 Flutter 官網對於跨平臺原理的描述,詳情可點擊瞭解
圖片描述
經過該圖咱們能夠看到,Flutter 會經過 MethodChannel 將數據傳遞給 iOS/ Android ,反之 iOS/ Android 也能夠經過 MethodChannel 將數據傳回給 Flutter 。

還有一個問題:Flutter 使用的是和 iOS、Android 不一樣的開發語言,相互能傳遞什麼類型的數據呢?
圖片描述
上面這張表羅列了 Flutter 使用的 Dart 語言與 iOS/Android 能夠傳遞的數據類型,從表中咱們能夠看到,它只能傳遞一些基本的數據類型,好比 bool,int,double,高級的就是 String,List,Map,並且表中指明瞭在各平臺對應的數據類型轉換:如 Dart 的 Map 對應 Android 的 HashMap,對應 iOS 的 NSDictionary 。

2、插件的基本結構介紹

在終端輸入下面的命令,等待一分鐘左右,Flutter 就會把整個項目框架搭建好。
圖片描述

圖片描述
Flutter Plugin 可簡單理解爲上圖中的 Flutter wrapper , iOS wrapper , Android wrapper 三個綠色部分,圖中的雙向箭頭代表了代碼的調用邏輯,這就是爲何說 Flutter 的插件能夠跨平臺使用。

如何肯定 Flutter wrapper 調用的是 iOS 的接口仍是 Android 的接口?答案是由運行的設備決定,即運行 iOS 設備,Flutter wrapper 自動調用 iOS wrapper 的接口,Android 也是這樣。

當執行完建立 Plugin 的命令以後,Flutter 會負責在當前目錄建立一個 Plugin項目,具體的目錄含義以下:

android/ : Android wrapper

ios/ :iOS wrapper

lib/ :Flutter wrapper

example/ :demo 根目錄

example/android/ :Android project

example/ios/ :iOS project

example/lib/ :Flutter app

第一次運行須要使用終端進入 Plugin 項目路徑下執行下面命令獲取 Flutter 的依賴。
圖片描述

3、代碼層面的交互演示

MethodChannel 的建立

Flutter 經過 MethodChannel 與 iOS/Android 進行交互,下面的代碼展現了三個平臺如何建立 MethodChannel 對象。
圖片描述

經過相同字符串建立的 MethodChannel 就能夠進行跨平臺的數據交互。

當 Flutter 調用接口觸發原生代碼的時候:

iOS 會觸發的方法
圖片描述

Android 會觸發的方法
圖片描述

兩個平臺同樣,都會獲取 MethodCall 對象 和 FlutterResult 對象。

MethodCall 對象保存了方法名和參數,經過方法名肯定調用具體的方法,經過參數獲取具體的數據。

FlutterResult 對象能夠將數據返回給 Flutter,下面會講解該對象的使用。

Flutter 與 iOS/Android 數據交互總共三種方式:

1.iOS/Android 不給 Flutter 返回數據
圖片描述

2.iOS/Android 經過 FlutterResult 給 Flutter 返回數據
圖片描述
圖片描述

3.iOS/Android 經過 MethodChannel 給 Flutter 返回數據
圖片描述
圖片描述

經過 FlutterResult 和 MethodChannel 均可以給 Flutter 返回數據,可是二者有所區別:

FlutterResult 適用於可以快速返回數據的接口,好比說 IM 鏈接的回調或者鏈接服務器的回調。

MethodChannel 適用於不肯定什麼時間響應數據的接口,好比說收到消息的回調。

MethodChannel 能夠替代 FlutterResult 返回數據,可是 FlutterResult 沒法替代 MethodChannel。

爲了讓開發者和更多平臺便捷的使用融雲IM 功能,融雲 IM Flutter 已經開源,歡迎你們體驗使用。

GitHub 地址:https://github.com/rongcloud/...

Flutter 倉庫地址:https://pub.dev/packages/rong...

融雲IM商用版年中大促火爆進行中

從 7 月 1 日——8 月 31 日,融雲年中大促正在火熱進行中,IM 商用版預存最低享 7 折,更多詳情能夠點擊登陸融雲官網活動頁面查看。

相關文章
相關標籤/搜索