為什么我們應該使用 Flutter?
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 支持使用由其他開發者貢獻給 Flutter 和 Dart 生態系統的共享軟件包。您可以在 https://pub.dev/ 中查找。
之后需要在 pubspec.yaml 中進行添加:
dependencies:
flutter:
sdk:?flutter
im_flutter_sdk:?^1.0.0
之后執行 flutter packages get 下載。
開發的 package
用戶也可以把自己開發的 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 的支持,更因為它提供了更完善的文檔和更高效的運行方式,開發者不必再把大量精力放到不同平臺的展示上,更好的完成自己的業務,從企業管理者角度看,也大大降低了開發成本。
iOS Flutter Android
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。