為什麼我們應該使用 Flutter?

為什麼我們應該使用 Flutter?

作者 | 杜潔鵬

封圖 | Flutter GitHub README

出品 | CSDN(ID:CSDNnews)

Flutter 是 Google 提供的新一代跨平臺方案,隨著 Google 在 IO19 宣佈 Flutter 支持 Web 平臺,就標誌著 Flutter 已經全面持所有平臺(目前 Windows 的只是早期預覽版本,未來有可能會支持 UWP),它提供了非常友好的文檔來幫助各端的同學迅速地進入到 Flutter 的海洋中。同時它的完全開源也讓其有了更快的迭代,更好的生態。

感興趣的同學可以關注 GitHub:https://github.com/flutter/flutter

为什么我们应该使用 Flutter?

Flutter 的優勢

相比較目前的混合開發方案,Flutter 提供了大量的文檔,能非常快速且友好的讓你加入到這個大家庭。它並不止 WebView,也用通過解釋 JS 後去操作系統的原生控件,Flutter 核心只有一層輕量的 C/C++代碼(Engine),Flutter 在 Dart 中實現了其他大部分系統(組合、手勢、動畫、框架、widget 等),因此,開發人員可以輕鬆地進行讀取、更改、替換或移除等操作。這為開發人員提供了對系統的巨大可定製性。

为什么我们应该使用 Flutter?

針對移動端,Flutter 提供了符合 Android 風格的 Material 和符合 iOS 風格的 Cupertino,同時對不同平臺也做了不同的兼容,更好地保留了平臺的特性,如 ScrollView,在 iOS 平臺中,滑動的時候就擁有回彈的效果,在 Android 平臺中,表現出來的就是阻尼的效果。當然,有的時候 Flutter 的 Framework 提供的 UI 格並不能滿足我們的需求,我們還可以去自定義控件。

Flutter 在開發中支持 Hot Reload,相比較原生,這樣的方式能更高效地開發,真正做到所寫即所得。

为什么我们应该使用 Flutter?

Flutter 與 Native 通訊

使用平臺通道在客戶端(Flutter UI)和宿主(平臺)之間傳遞消息。

为什么我们应该使用 Flutter?

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,從而用來快速地編碼和解碼。

为什么我们应该使用 Flutter?

binaryMessenger:

为什么我们应该使用 Flutter?

雖然三種 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?

Flutter Packages 的操作

使用 Packages

Flutter 支持使用由其他開發者貢獻給 Flutter 和 Dart 生態系統的共享軟件包。您可以在 https://pub.dev/ 中查找。

之後需要在 pubspec.yaml 中進行添加:

<code>dependencies:
flutter:
sdk: flutter

im_flutter_sdk: ^1.0.0/<code>

之後執行 flutter packages get 下載。

開發的 package

用戶也可以把自己開發的 Flutter package 併發布在 https://pub.dev/ 上。這裡需要注意,如果開發的 package 需要使用第三方 sdk,比如您開發的 package 需要集成環信 Android 和 iOS 的 SDK,需要在對應的配置文件中添加對 SDK 的引用 ,如:

Android 需要在 build.gradle 中添加 Android SDK:

<code>dependencies {
api 'com.hyphenate:hyphenate-sdk:3.6.4'
}/<code>

iOS 需要在 podspec 中添加 iOS SDK:

<code>s.dependency 'Hyphenate', '~> 3.6.4'/<code>

Packages 發佈

發佈前需要先檢查:

<code>pubspec.yaml
README.md
CHANGELOG.md
/<code>

這三個文件最後會出現在 https://pub.dev/package 中包信息的展示頁 ,請仔細確認。

之後執行校驗:

<code>flutter packages pub publish --dry-run --server=https://pub.dartlang.org/<code>

沒有問題後執行發佈:

<code>flutter packages pub publish --server=https://pub.dartlang.org/<code>

此時會要求校驗郵箱,把命令行中返回的 URL 粘貼到瀏覽器中,使用 Google Gmail 進行驗證,校驗後命令行中會提示校驗成功,之後開始上傳,等待上傳結束後 package 就發佈成功了。之後就可以在 pub.dev 中搜索到發佈的。

結語

Flutter 作為新興的混合開發解決方案,已經被廣泛關注和使用,這不光是因為它有 Google 的支持,更因為它提供了更完善的文檔和更高效的運行方式,開發者不必再把大量精力放到不同平臺的展示上,更好的完成自己的業務,從企業管理者角度看,也大大降低了開發成本。

作者簡介:杜潔鵬,從業 9 年,在環信負責 iOS 開發,專注於移動開發、VR 和攝影方向。


分享到:


相關文章: