爲什麼我們應該使用 Flutter?環信Flutter SDK初體驗

作者 | 環信杜潔鵬
責編 | 唐小引封圖 | Flutter GitHub README
出品 | CSDN(ID:CSDNnews)
在這裏插入圖片描述
Flutter 是 Google 提供的新一代跨平臺方案,隨着 Google 在 IO19 宣佈 Flutter 支持 Web 平臺,就標誌着 Flutter 已經全面持所有平臺(目前 Windows 的只是早期預覽版本,未來有可能會支持 UWP),它提供了非常友好的文檔來幫助各端的同學迅速地進入到 Flutter 的海洋中。同時它的完全開源也讓其有了更快的迭代,更好的生態。
感興趣的同學可以關注 GitHub:https://github.com/flutter/flutter

Flutter 的優勢
相比較目前的混合開發方案,Flutter 提供了大量的文檔,能非常快速且友好的讓你加入到這個大家庭。它並不止 WebView,也用通過解釋 JS 後去操作系統的原生控件,Flutter 核心只有一層輕量的 C/C++代碼(Engine),Flutter 在 Dart 中實現了其他大部分系統(組合、手勢、動畫、框架、widget 等),因此,開發人員可以輕鬆地進行讀取、更改、替換或移除等操作。這爲開發人員提供了對系統的巨大可定製性。
在這裏插入圖片描述
針對移動端,Flutter 提供了符合 Android 風格的 Material 和符合 iOS 風格的 Cupertino,同時對不同平臺也做了不同的兼容,更好地保留了平臺的特性,如 ScrollView,在 iOS 平臺中,滑動的時候就擁有回彈的效果,在 Android 平臺中,表現出來的就是阻尼的效果。當然,有的時候 Flutter 的 Framework 提供的 UI 格並不能滿足我們的需求,我們還可以去自定義控件。
Flutter 在開發中支持 Hot Reload,相比較原生,這樣的方式能更高效地開發,真正做到所寫即所得。
Flutter 與 Native 通訊
使用平臺通道在客戶端(Flutter UI)和宿主(平臺)之間傳遞消息。
在這裏插入圖片描述
Flutter Platform Channel
Flutter 定義了三種不同類型的 Channel,它們分別是:
BasicMessageChannel:傳遞字符串或半結構化信息;
MethodChannel:傳遞方法調用(method invocation);
EventChannel:數據流(event streams)通訊。
三種類型的 Channel 都定義在 platform_channel.dart 中,從源碼中可以看到三種 Channel 都用到了以下三個屬性。
name:String 類型,表示 channel 的名字,全局唯一;
codec:MessageCodec 或 MethodCodec 類型,消息的編碼解碼器;
binaryMessenger:BinaryMessenger 類型,用於發送數據。
name:
Flutter 中可能存在多個 Channel,Channel 之所以使用 name 來區分,當從 Flutter 端發送到 Platform 端時,需要傳 channel name,之後通過 name 找到對應的 handle 來處理。
codec:
Flutter 定義了兩種 Codec —— MessageCodec 和 MethodCodec,從而用來快速地編碼和解碼。
在這裏插入圖片描述
binaryMessenger:
在這裏插入圖片描述
雖然三種 Channel 各有用途,但是他們與 Flutter 通信的工具卻是相同的,均爲 BinaryMessager。
BinaryMessenger 是 Platform 端與 Flutter 端通信的工具,其通信使用的消息格式爲二進制格式數據。當我們初始化一個 Channel,並向該 Channel 註冊處理消息的 Handler 時,實際上會生成一個與之對應的BinaryMessageHandler,並以 channel name 爲 key 註冊到 BinaryMessenger 中。當 Flutter 端發送消息到 BinaryMessenger 時,BinaryMessenger 會根據 channel 找到對應的 BinaryMessageHandler,並交由其處理。
Handler:
MessageHandler;
MethodHandler;
StreamHandler。
三種 handle 分別與三種 channel 對應,當我們向 channel 註冊一個 handle 時,實際上就是向 BinaryMessager 註冊一個對應 BinaryMessageHandler。當向 channel 發送消息時,就需要使用對應的 handle 來處理。
Flutter Packages 的操作
使用 Packages
用戶也可以把自己開發的 Flutter package 併發布在 https://pub.dev/ 上。這裏需要注意,如果開發的 package 需要使用第三方 sdk,比如您開發的 package 需要集成環信 Android 和 iOS 的 SDK,需要在對應的配置文件中添加對 SDK 的引用 ,如:
Android 需要在 build.gradle 中添加 Android SDK:
dependencies {
api ‘com.hyphenate:hyphenate-sdk:3.6.4’
}
iOS 需要在 podspec 中添加 iOS SDK:
s.dependency ‘Hyphenate’, ‘~> 3.6.4’
Packages 發佈
發佈前需要先檢查:
pubspec.yaml
README.md
CHANGELOG.md
這三個文件最後會出現在 https://pub.dev/package 中包信息的展示頁 ,請仔細確認。
之後執行校驗:
flutter packages pub publish --dry-run --server=https://pub.dartlang.org
沒有問題後執行發佈:
flutter packages pub publish --server=https://pub.dartlang.org
此時會要求校驗郵箱,把命令行中返回的 URL 粘貼到瀏覽器中,使用 Google Gmail 進行驗證,校驗後命令行中會提示校驗成功,之後開始上傳,等待上傳結束後 package 就發佈成功了。之後就可以在 pub.dev 中搜索到發佈的。
結語
Flutter 作爲新興的混合開發解決方案,已經被廣泛關注和使用,這不光是因爲它有 Google 的支持,更因爲它提供了更完善的文檔和更高效的運行方式,開發者不必再把大量精力放到不同平臺的展示上,更好的完成自己的業務,從企業管理者角度看,也大大降低了開發成本。
作者簡介:杜潔鵬,從業 9 年,在環信負責 iOS 開發,專注於移動開發、VR 和攝影方向。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章