沒(méi)用的前言
其實(shí)自從 Jetpack Compose 面世以來(lái),關(guān)于 Flutter 與 Compose 之間的選擇問(wèn)題就開(kāi)始在 Android 開(kāi)發(fā)中出現(xiàn)拼窥,就如同之前有 iOSer 糾結(jié)在 Flutter 和 SwiftUI 之間選誰(shuí)一樣戏蔑,對(duì)于 Android 開(kāi)發(fā)來(lái)說(shuō)似乎“更頭痛”的是 Flutter 與 Compose “同出一爹”。
本來(lái)關(guān)于這個(gè)話(huà)題沒(méi)什么好寫(xiě)的鲁纠,因?yàn)檫@個(gè)話(huà)題屬于“吃力不討好”的類(lèi)型 总棵,畢竟被原生開(kāi)發(fā)看到了,可能就有人就要痛批我:
“是我 Andorid 提不動(dòng)刀了改含,還是這些一兩年的’小框架‘飄了情龄,搞不好我們?cè)俚鹊人鼈兙投紱隽耍阏炀椭馈溬u(mài)焦慮’收割流量捍壤≈枋樱”
但是看你們討論得熱火朝天,加之時(shí)不時(shí)要回答類(lèi)似的問(wèn)題鹃觉,實(shí)在憋不住了专酗,所以最終還是選擇“冒死”輸出一波,從我的觀點(diǎn)來(lái)介紹它們之間的關(guān)系和如何選擇帜慢。
當(dāng)然笼裳,有人說(shuō)我都不選不行嗎?當(dāng)然可以粱玲,因?yàn)樵谀壳半A段 Flutter 和 Compose 都不影響你的 Android 開(kāi)發(fā)地位躬柬,它們最多只是屬于競(jìng)爭(zhēng)工具。
Flutter 和 Compose 初衷
Flutter 和 Compose 的未來(lái)目標(biāo)會(huì)比較一致抽减,但是至少它們出現(xiàn)的初衷是不一樣允青。
首先 Compose 是 Jetpack 系列的全新 UI 庫(kù),理解下這點(diǎn)卵沉!Compose 是 Jetpack 系列的成員之一颠锉,所以可以被應(yīng)用到 Android 界面開(kāi)發(fā)中法牲,所以你也可以選擇不用,用不用都能開(kāi)發(fā) Android 的 UI 琼掠。
然后再說(shuō) Compose 出生的目的:就是為了重新定義 Android 上 UI 的編寫(xiě)方式拒垃,為了提高 Android 原生的 UI 開(kāi)發(fā)效率,讓 Android 的 UI 開(kāi)發(fā)方式能跟上時(shí)代的步伐瓷蛙。
不管你喜不喜歡悼瓮,聲明式的界面開(kāi)發(fā)就是如今的潮流,不管是 React 艰猬、SwiftUI 横堡、Flutter 等都在表明這一點(diǎn)。
而對(duì)于 Flutter 而言就是跨平臺(tái)冠桃,因?yàn)?Flutter 沒(méi)有自己的平臺(tái) 命贴,有人說(shuō) Fuchsia
會(huì)是 Flutter 的家,但那已經(jīng)屬于后話(huà)食听,畢竟 Fuchsia
要先能養(yǎng)活自己胸蛛。
因?yàn)?Flutter 出生就是為了跨平臺(tái)存在的全新 UI 框架,從底層到上層都是“創(chuàng)新”和“大膽”的設(shè)計(jì)碳蛋,就選擇 Dart 本身就是一項(xiàng)很“大膽”的決定胚泌,甚至在 Web 平臺(tái)都敢支持選用 Canvaskit
的 WebAssembly
模式。
所以 Flutter 的“任性”從一出來(lái)就不被看好肃弟,當(dāng)然至今也有不看好它的人,因?yàn)樗撤N程度很“偏激”和不友好零蓉。
所以扯了那么多笤受,總結(jié)下就是:
Compose 是 Android UI 的未來(lái),現(xiàn)階段你可以不會(huì)敌蜂,但是如果未來(lái)你會(huì)繼續(xù)在 Android 平臺(tái)的話(huà)箩兽,你就必須會(huì)。
Flutter 的未來(lái)在于多平臺(tái)章喉,更穩(wěn)定可靠的多平臺(tái) UI 框架汗贫。如果你的路線方向不是大前端或者多端開(kāi)發(fā)者,那你不需要會(huì)秸脱。
對(duì)了落包,鴻蒙上也是有類(lèi)似 Flutter 的實(shí)現(xiàn),感興趣的可以自己關(guān)注下摊唇。
Compose 和 Flutter 未來(lái)一致
雖然 Compose 和 Flutter 初始服務(wù)的對(duì)象并不一致咐蝇,但是它們未來(lái)目標(biāo)肯定是一致。
為什么這么說(shuō)巷查?《Jetpack Compose for Desktop: 里程碑1發(fā)布》 不就表明了這一態(tài)度么有序? Compose 雖然只是作為 Jetpack 的一個(gè) UI 子集抹腿,但是它設(shè)計(jì)的理念和架構(gòu)本身就帶有跨平臺(tái)支持的潛力。
本質(zhì)是 Compose 也是類(lèi)似于一個(gè)編譯器加上一個(gè) Skia 的工作模式旭寿,這和 Flutter 沒(méi)有什么區(qū)別警绩,不說(shuō)開(kāi)發(fā)方式,僅從控件命名上 Flutter 和 Compose 就不會(huì)讓你感覺(jué)陌生盅称。
不說(shuō)控件房蝉,就說(shuō)這次 Flutter 2.0 更新中 Dart 1.12 的 null-safety 和 Kotlin 像不像?
所以回歸到主題的另外一個(gè)問(wèn)題微渠, Flutter 和 Compose 沖突嗎搭幻?
從立項(xiàng)的意義上看 Flutter 和 Compose 好像是沖突的,但是從使用者的角度看逞盆,它們并不沖突檀蹋。
因?yàn)閷?duì)于開(kāi)發(fā)者而言,不管你是先學(xué)會(huì) Compose 還是先學(xué)會(huì) Flutter云芦,對(duì)于你掌握另外一項(xiàng)技能都有幫助俯逾,相當(dāng)于學(xué)會(huì)一種就等于學(xué)會(huì)另一種的 70%
從未來(lái)的角度看:
如果你是原生開(kāi)發(fā),還沒(méi)接觸過(guò) Flutter 舅逸, 那先去學(xué) Compose 桌肴,這對(duì)你的 Android 生涯更有幫助,然后再學(xué) Flutter 也不難琉历。
如果你已經(jīng)在使用或者學(xué)習(xí) Flutter 坠七,那么請(qǐng)繼續(xù)深造,不必因?yàn)閾?dān)心 Compose 而停滯不前旗笔,當(dāng)你掌握了 Flutter 后其實(shí)離 Compose 也不遠(yuǎn)了彪置。
它們二者的未來(lái)都會(huì)是多平臺(tái),而我認(rèn)為的沖突主要是在于動(dòng)手學(xué)起來(lái)蝇恶,而不是在二者之間徘徊糾結(jié)拳魁。
從現(xiàn)實(shí)角度出發(fā):目前 Flutter 2.0 下的 Android 和 iOS 已經(jīng)趨向穩(wěn)定,Web 已經(jīng)進(jìn)入 Stable 分支撮弧,而 Macos/Linux/Win 也進(jìn)入了 Beta 階段潘懊,并且可以在 Stable 分支通過(guò) snapshot 預(yù)覽。所以從這個(gè)階段考慮贿衍,如果你需要跨平臺(tái)開(kāi)發(fā)授舟,甚至 PC 平臺(tái),那么優(yōu)先考慮 Flutter 吧舌厨。
你選擇 React Native 也沒(méi)問(wèn)題岂却,說(shuō)起來(lái)最近 React Native 的版本號(hào)已經(jīng)到了 0.64 了??
當(dāng)然大家可能會(huì)關(guān)心框架是否有坑的問(wèn)題,本質(zhì)上所有框架都有坑,甚至網(wǎng)絡(luò)因素都可能會(huì)成為你的痛點(diǎn)躏哩,問(wèn)題在于你是否接受這些坑署浩。
跨平臺(tái)的背后本身就是“臟活”和“累活”, Flutter 的全平臺(tái)之路很艱難扫尺,就像之前寫(xiě)的《解讀 Flutter 全平臺(tái)開(kāi)發(fā)的誤解與偏見(jiàn)》筋栋, 現(xiàn)階段 Flutter 全平臺(tái)更多只是噱頭,只是提供了“多一種可能”的階段正驻。
最后還是要例行補(bǔ)充這一點(diǎn):
跨平臺(tái)之所以是跨平臺(tái)弊攘,首先就是要有對(duì)應(yīng)原生平臺(tái)的存在, 很多原生平臺(tái)的問(wèn)題都需要回歸到平臺(tái)去解決姑曙,那些喜歡吹 xxx 制霸原生要涼的節(jié)奏襟交,僅僅是因?yàn)椤澳愕慕箲]會(huì)成為它們的利潤(rùn)”。
聊點(diǎn)廢話(huà)
說(shuō)點(diǎn)“道理我都懂”的實(shí)話(huà)伤靠,本質(zhì)是我們作為開(kāi)發(fā)者捣域,其實(shí)并不應(yīng)該把自己歸納為于某種語(yǔ)言和特定的框架之下,我們現(xiàn)在被歸納在某個(gè)領(lǐng)域僅僅是因?yàn)楣ぷ餍枰绾希鴮?duì)于未來(lái)我們的發(fā)展焕梅,其實(shí)更應(yīng)該注重的是編程基礎(chǔ)和動(dòng)手能力。
我本身是通過(guò) Weex 接觸的 Vue 卦洽,也用過(guò) uni-app 做個(gè)簡(jiǎn)單的小程序贞言,用 React Native 開(kāi)發(fā)過(guò)兩端 App ,也用 Flutter 寫(xiě)過(guò) Web 阀蒂,甚至手賤地在 SpringBoot 上用 Kotlin 寫(xiě) API该窗。
所以在我眼中,現(xiàn)在客戶(hù)端和前端之間的劃分已經(jīng)越來(lái)越模糊脂新,我遇到不少 Android 開(kāi)發(fā)寫(xiě)過(guò)小程序或者 Vue 挪捕,不少前端也通過(guò) uni-app, RN 和 Flutter 在寫(xiě) App 争便,這是很正常的趨勢(shì),因?yàn)槠脚_(tái)成熟了断医,越成熟的平臺(tái)就會(huì)開(kāi)始和相近的領(lǐng)域融合貫通滞乙。
你想說(shuō)“卷”也行,這種趨勢(shì)會(huì)讓一些簡(jiǎn)單鉴嗤、重復(fù)或者需要共享的內(nèi)容通過(guò)跨平臺(tái)來(lái)得到落地斩启,我相信有的人不看好跨平臺(tái),但是它存在的場(chǎng)景確實(shí)有它關(guān)鍵的價(jià)值醉锅。
也許某些領(lǐng)域我的認(rèn)識(shí)不是很深兔簇,但是在需要的時(shí)候我可以動(dòng)手滿(mǎn)足需求,甚至去深入探索一下垄琐,而我也有自己精通的領(lǐng)域,二次并不沖突。
當(dāng)然你說(shuō)我只想在某個(gè)平臺(tái)深入研究有沒(méi)有問(wèn)題?那肯定沒(méi)有問(wèn)題,這是好事,因?yàn)榫硞€(gè)領(lǐng)域本來(lái)就是非常好的一件事。
但是到涂!對(duì)沉御,我還是要說(shuō)這個(gè)但是,因?yàn)楹芏鄷r(shí)候精通某項(xiàng)技術(shù),是需要業(yè)務(wù)場(chǎng)景去驗(yàn)證和推進(jìn)的嘶窄,如果不是大體量的業(yè)務(wù)場(chǎng)景,沒(méi)有經(jīng)歷過(guò)各種極端的考驗(yàn),很多時(shí)候所謂的精通只是表層精通。
為什么說(shuō)這個(gè)哟旗?因?yàn)樵诮涣鬟^(guò)程中經(jīng)常有一些人說(shuō):想要深入xxx去精通某項(xiàng)技術(shù)或者領(lǐng)域贩据,但是最終還是“三過(guò)門(mén)而不入”。
最后的最后闸餐,我想說(shuō)學(xué)習(xí)其實(shí)本身是一件長(zhǎng)期投資的事情饱亮,我們追求“性?xún)r(jià)比”和“高回報(bào)”很正常,但是這和投資金融一樣舍沙,如果一直想要通過(guò)“投機(jī)”來(lái)獲利近上,那就要有做好韭菜的準(zhǔn)備。