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 折,更多詳情能夠點擊登陸融雲官網活動頁面查看。