Flutter 與 Compose 應該怎麼選擇?它們衝突嗎?

戀貓de小郭發表於2021-03-14

沒用的前言

其實自從 Jetpack Compose 面世以來,關於 Flutter 與 Compose 之間的選擇問題就開始在 Android 開發中出現,就如同之前有 iOSer 糾結在 Flutter 和 SwiftUI 之間選誰一樣,對於 Android 開發來說似乎“更頭痛”的是 Flutter 與 Compose “同出一爹”

本來關於這個話題沒什麼好寫的,因為這個話題屬於“吃力不討好”的型別 ,畢竟被原生開發看到了,可能就有人就要痛批我:

“是我 Andorid 提不動刀了,還是這些一兩年的’小框架‘飄了,搞不好我們再等等它們就都涼了,你整天就知道’販賣焦慮’收割流量。”

但是看你們討論得熱火朝天,加之時不時要回答類似的問題,實在憋不住了,所以最終還是選擇“冒死”輸出一波,從我的觀點來介紹它們之間的關係和如何選擇。

當然,有人說我都不選不行嗎?當然可以,因為在目前階段 Flutter 和 Compose 都不影響你的 Android 開發地位,它們最多隻是屬於競爭工具。

Flutter 和 Compose 初衷

Flutter 和 Compose 的未來目標會比較一致,但是至少它們出現的初衷是不一樣。

首先 Compose 是 Jetpack 系列的全新 UI 庫,理解下這點!Compose 是 Jetpack 系列的成員之一,所以可以被應用到 Android 介面開發中,所以你也可以選擇不用,用不用都能開發 Android 的 UI

然後再說 Compose 出生的目的:就是為了重新定義 Android 上 UI 的編寫方式,為了提高 Android 原生的 UI 開發效率,讓 Android 的 UI 開發方式能跟上時代的步伐

不管你喜不喜歡,宣告式的介面開發就是如今的潮流,不管是 React 、SwiftUI 、Flutter 等都在表明這一點。

而對於 Flutter 而言就是跨平臺,因為 Flutter 沒有自己的平臺 ,有人說 Fuchsia 會是 Flutter 的家,但那已經屬於後話,畢竟 Fuchsia 要先能養活自己。

因為 Flutter 出生就是為了跨平臺存在的全新 UI 框架,從底層到上層都是“創新”和“大膽”的設計,就選擇 Dart 本身就是一項很“大膽”的決定,甚至在 Web 平臺都敢支援選用 CanvaskitWebAssembly 模式。

所以 Flutter 的“任性”從一出來就不被看好,當然至今也有不看好它的人,因為它某種程度很“偏激”和不友好。

所以扯了那麼多,總結下就是:

  • Compose 是 Android UI 的未來,現階段你可以不會,但是如果未來你會繼續在 Android 平臺的話,你就必須會。

  • Flutter 的未來在於多平臺,更穩定可靠的多平臺 UI 框架。如果你的路線方向不是大前端或者多端開發者,那你不需要會。

對了,鴻蒙上也是有類似 Flutter 的實現,感興趣的可以自己關注下。

Compose 和 Flutter 未來一致

雖然 Compose 和 Flutter 初始服務的物件並不一致,但是它們未來目標肯定是一致。

為什麼這麼說?《Jetpack Compose for Desktop: 里程碑1釋出》 不就表明了這一態度麼? Compose 雖然只是作為 Jetpack 的一個 UI 子集,但是它設計的理念和架構本身就帶有跨平臺支援的潛力

本質是 Compose 也是類似於一個編譯器加上一個 Skia 的工作模式,這和 Flutter 沒有什麼區別,不說開發方式,僅從控制元件命名上 Flutter 和 Compose 就不會讓你感覺陌生。

不說控制元件,就說這次 Flutter 2.0 更新中 Dart 1.12 的 null-safety 和 Kotlin 像不像?

所以迴歸到主題的另外一個問題, Flutter 和 Compose 衝突嗎?

從立項的意義上看 Flutter 和 Compose 好像是衝突的,但是從使用者的角度看,它們並不衝突

因為對於開發者而言,不管你是先學會 Compose 還是先學會 Flutter,對於你掌握另外一項技能都有幫助,相當於學會一種就等於學會另一種的 70%

從未來的角度看:

  • 如果你是原生開發,還沒接觸過 Flutter , 那先去學 Compose ,這對你的 Android 生涯更有幫助,然後再學 Flutter 也不難。

  • 如果你已經在使用或者學習 Flutter ,那麼請繼續深造,不必因為擔心 Compose 而停滯不前,當你掌握了 Flutter 後其實離 Compose 也不遠了。

它們二者的未來都會是多平臺,而我認為的衝突主要是在於動手學起來,而不是在二者之間徘徊糾結。

從現實角度出發:目前 Flutter 2.0 下的 Android 和 iOS 已經趨向穩定,Web 已經進入 Stable 分支,而 Macos/Linux/Win 也進入了 Beta 階段,並且可以在 Stable 分支通過 snapshot 預覽。所以從這個階段考慮,如果你需要跨平臺開發,甚至 PC 平臺,那麼優先考慮 Flutter 吧。

你選擇 React Native 也沒問題,說起來最近 React Native 的版本號已經到了 0.64 了?

當然大家可能會關心框架是否有坑的問題,本質上所有框架都有坑,甚至網路因素都可能會成為你的痛點,問題在於你是否接受這些坑

跨平臺的背後本身就是“髒活”和“累活”, Flutter 的全平臺之路很艱難,就像之前寫的《解讀 Flutter 全平臺開發的誤解與偏見》, 現階段 Flutter 全平臺更多隻是噱頭,只是提供了“多一種可能”的階段。

最後還是要例行補充這一點:

跨平臺之所以是跨平臺,首先就是要有對應原生平臺的存在, 很多原生平臺的問題都需要回歸到平臺去解決,那些喜歡吹 xxx 制霸原生要涼的節奏,僅僅是因為“你的焦慮會成為它們的利潤”。

聊點廢話

說點“道理我都懂”的實話,本質是我們作為開發者,其實並不應該把自己歸納為於某種語言和特定的框架之下,我們現在被歸納在某個領域僅僅是因為工作需要,而對於未來我們的發展,其實更應該注重的是程式設計基礎和動手能力。

我本身是通過 Weex 接觸的 Vue ,也用過 uni-app 做個簡單的小程式,用 React Native 開發過兩端 App ,也用 Flutter 寫過 Web ,甚至手賤地在 SpringBoot 上用 Kotlin 寫 API。

所以在我眼中,現在客戶端和前端之間的劃分已經越來越模糊,我遇到不少 Android 開發寫過小程式或者 Vue ,不少前端也通過 uni-app, RN 和 Flutter 在寫 App ,這是很正常的趨勢,因為平臺成熟了,越成熟的平臺就會開始和相近的領域融合貫通

你想說“卷”也行,這種趨勢會讓一些簡單、重複或者需要共享的內容通過跨平臺來得到落地,我相信有的人不看好跨平臺,但是它存在的場景確實有它關鍵的價值。

也許某些領域我的認識不是很深,但是在需要的時候我可以動手滿足需求,甚至去深入探索一下,而我也有自己精通的領域,二次並不衝突。

當然你說我只想在某個平臺深入研究有沒有問題?那肯定沒有問題,這是好事,因為精通某個領域本來就是非常好的一件事

但是!對,我還是要說這個但是,因為很多時候精通某項技術,是需要業務場景去驗證和推進的,如果不是大體量的業務場景,沒有經歷過各種極端的考驗,很多時候所謂的精通只是表層精通。

為什麼說這個?因為在交流過程中經常有一些人說:想要深入xxx去精通某項技術或者領域,但是最終還是“三過門而不入”。

最後的最後,我想說學習其實本身是一件長期投資的事情,我們追求“價效比”和“高回報”很正常,但是這和投資金融一樣,如果一直想要通過“投機”來獲利,那就要有做好韭菜的準備。

相關文章