扣丁書屋

為什么我們應該使用 Flutter?

Flutter 是 Google 提供的新一代跨平臺方案,隨著 Google 在 IO19 宣布 Flutter 支持 Web 平臺,就標志著 Flutter 已經全面持所有平臺(目前 Windows 的只是早期預覽版本,未來有可能會支持 UWP),它提供了非常友好的文檔來幫助各端的同學迅速地進入到 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 的支持,更因為它提供了更完善的文檔和更高效的運行方式,開發者不必再把大量精力放到不同平臺的展示上,更好的完成自己的業務,從企業管理者角度看,也大大降低了開發成本。


https://mp.weixin.qq.com/s/iZWp_skA4-P07TDtERSSNg

最多閱讀

如何有效定位Flutter內存問題? 1年以前  |  11682次閱讀
Flutter的手勢GestureDetector分析詳解 3年以前  |  7608次閱讀
Flutter插件詳解及其發布插件 2年以前  |  6304次閱讀
在Flutter中添加資源和圖片 3年以前  |  5145次閱讀
Flutter 狀態管理指南之 Provider 3年以前  |  4342次閱讀
發布Flutter開發的iOS程序 3年以前  |  4320次閱讀
Flutter for Web詳細介紹 3年以前  |  4191次閱讀
在Flutter中發起HTTP網絡請求 3年以前  |  3956次閱讀
使用Inspector檢查用戶界面 3年以前  |  3886次閱讀
Flutter Widget框架概述 3年以前  |  3264次閱讀
Flutter路由詳解 3年以前  |  3106次閱讀
JSON和序列化 3年以前  |  3029次閱讀
Flutter框架概覽 3年以前  |  2991次閱讀
推薦5個Flutter重磅開源項目! 1年以前  |  2953次閱讀
為Flutter應用程序添加交互 3年以前  |  2945次閱讀
處理文本輸入 3年以前  |  2845次閱讀
使用自定義字體 3年以前  |  2844次閱讀
編寫國際化Flutter App 3年以前  |  2834次閱讀

手機掃碼閱讀
18禁止午夜福利体验区,人与动人物xxxx毛片人与狍,色男人窝网站聚色窝
<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>