眾所周知,F(xiàn)lutter 是一個(gè)非常優(yōu)秀的開發(fā)框架,開發(fā)者可以借助它在 IOS 以及 Android 構(gòu)建交互豐富的、精美的應(yīng)用程序。在2022年谷歌開發(fā)大會上,作為I/O主題演講的一部分,主創(chuàng)團(tuán)隊(duì)正式推出 Flutter 3.0。
Flutter 3.0 更新概況
Flutter 3.0 完成了從以移動為中心到多平臺框架的路線圖,提供了對macOS和linux桌面應(yīng)用的支持,以及對Firebase集成的改進(jìn),新的生產(chǎn)力和性能特性,并支持Apple Silicon。
具體來看,F(xiàn)lutter 3.0 增加了對macOS和Linux應(yīng)用的穩(wěn)定支持。增加平臺支持需要的不僅僅是渲染像素:它包括新的輸入和交互模型、編譯和構(gòu)建支持、可訪問性和國際化,以及特定平臺的整合。目標(biāo)是讓大家能夠靈活地充分利用底層操作系統(tǒng),同時(shí)盡可能多地分享開發(fā)者選擇的用戶界面和邏輯。
在macOS上,已經(jīng)支持英特爾和蘋果Silicon,并提供通用二進(jìn)制支持,使應(yīng)用程序能夠打包可執(zhí)行文件,在兩種架構(gòu)上原生運(yùn)行。在Linux上,Canonical和谷歌已經(jīng)合作為開發(fā)提供了一個(gè)高度集成的、最好的選擇。
Flutter 3還對許多基本要素進(jìn)行了改進(jìn),提高了性能,支持Material You,并更新了生產(chǎn)力。
Flutter 應(yīng)用情況
隨著 Flutter 開發(fā)框架的不斷成熟,越來越多的人開始用它構(gòu)建應(yīng)用程序。截止目前,有超過50萬個(gè)應(yīng)用程序是用Flutter建立的。來自data.ai等研究公司的分析,以及公眾的評價(jià),表明Flutter被許多細(xì)分領(lǐng)域的客戶所使用:從微信等社交應(yīng)用到Betterment和Nubank等金融和銀行應(yīng)用;從SHEIN和trip.com等商務(wù)應(yīng)用到Fastic和Tabcorp等生活方式應(yīng)用;從My BMW等伴侶應(yīng)用到巴西政府等公共機(jī)構(gòu)。
同時(shí)在 Flutter 3.0 發(fā)布會上,研發(fā)團(tuán)隊(duì)發(fā)布了基于開發(fā)者的調(diào)研數(shù)據(jù):
- 91% 的開發(fā)者認(rèn)為 Flutter 縮短了構(gòu)建和發(fā)布應(yīng)用程序的時(shí)間。
- 85%的開發(fā)者認(rèn)為Flutter使他們的應(yīng)用程序比以前更漂亮。
- 85%的人認(rèn)為Flutter使他們的應(yīng)用比以前能在更多的平臺上發(fā)布。
Flutter 助力小程序開發(fā)
小程序作為我國技術(shù)研發(fā)屆的一個(gè)獨(dú)特產(chǎn)物,由于其輕量、便捷、優(yōu)質(zhì)的體驗(yàn)在近些年得到迅速的發(fā)展,特別是在騰訊、阿里、百度、字節(jié)等各家大廠的小程序開發(fā)平臺助推下,其中僅微信小程序的數(shù)量就超過700萬,小程序開發(fā)者數(shù)量300-400萬人,規(guī)模相當(dāng)驚人。
小程序與 Flutter 最密切關(guān)聯(lián)還是在渲染優(yōu)化上,先來看看整個(gè)框架:
在這個(gè)架構(gòu)下,我們就將 Layout 層的 LV-CPP 專門的作為小程序的 UI 體系處理器,將 UI 信息布局計(jì)算好再提交給抽象的后端去渲染,LV-CPP 作為小程序的框架和渲染器的中間層,集中的在 C++ 層去處理與 Web 相關(guān)的復(fù)雜特性。渲染端就可以基于特定的協(xié)議和接口專注將元素轉(zhuǎn)化為 UI 組件,最終繪制出來。
通過結(jié)合 Flutter 和 LV-CPP,我們把實(shí)現(xiàn)代碼收斂在 C++ 和 Dart 上,進(jìn)一步簡化了基于小程序技術(shù)棧實(shí)現(xiàn)跨平臺業(yè)務(wù)開發(fā)的框架維護(hù)成本。
再來看看各家廠商是如何開展的:
京東:把Flutter擴(kuò)展到微信小程序端的探索
京東發(fā)起了Flutter_mp的開源項(xiàng)目,此框架主要做到兩件事情:
1.需要根據(jù)Flutter生成相關(guān)的小程序wxml模板文件。
2.收集wxml渲染需要的數(shù)據(jù),放置到小程序組件的data字段。
flutter_mp還處于早期的實(shí)驗(yàn)階段,很多功能還在探索規(guī)劃中,只支持Center,Column,Container,Expanded,Image.asset,ListView,Row,Text這些基本W(wǎng)idget,暫不支持 自定義Widget,而且自己的Flutter代碼只能夠出現(xiàn)在lib/main.dart文件中。
美團(tuán):基于跨平臺框架 Flutter 的動態(tài)化平臺建設(shè)
微信和咸魚都強(qiáng)調(diào)Flutter的跨平臺,而美團(tuán)則強(qiáng)調(diào)了Flutter的動態(tài)化,而我們知道,F(xiàn)lutter不支持線上的動態(tài)化,所以美團(tuán)的分享主要圍繞邏輯層動態(tài)化和渲染層動態(tài)化來進(jìn)行。
美團(tuán)在動態(tài)化引擎部分預(yù)置了一個(gè)JSC模塊,也就是JsCore,通過JSC來執(zhí)行JAVAScript從而實(shí)現(xiàn)邏輯層的動態(tài)化,而渲染層動態(tài)化則通過xml+css來展示,然后解析生成布局樹并最終通過Flutter來渲染。
微信:基于小程序技術(shù)棧的微信客戶端跨平臺實(shí)踐
微信小程序,最開始是采用Webview渲染的方案,后面又采用了React-Native-Like的方案,再后來微信提出了一個(gè)很大膽的想法:上層依然使用WXML+WXSS來表示,但是底層使用Flutter引擎來渲染,而且他們覺得Platform Channel通信效率低,自己整了一個(gè)dart2cpp的模塊來負(fù)責(zé)通信。目前微信不會放棄 WebView 渲染,嘗試僅限于微信客戶端內(nèi)部部分場景使用。
FinClip:基于小程序技術(shù)的跨端開發(fā)平臺建設(shè)
FinClip作為小程序容器技術(shù),也可以說是小程序沙箱Runtime/Engine,提供Runtime基于瀏覽器內(nèi)核,采用動態(tài)語言(JS)和聲明式View構(gòu)建(XML),兼容互聯(lián)網(wǎng)主流小程序技術(shù),可采用Vue、react基礎(chǔ)上的DSL框架。
實(shí)際上不與Flutter、Reactive-Native、100% Native或Framework們技術(shù)沖突,嵌入即可,個(gè)體小程序開發(fā)依然可享受React等Web Framework、mate Framework、DSL Frameworke 的成果
這種小程序容器技術(shù),將視圖層與邏輯層分離也帶來了許多好處:
1、方便多個(gè)小程序頁面之間的數(shù)據(jù)共享和交互。在小程序的生命周期中具有相同的上下文可以為具備原生應(yīng)用程序開發(fā)背景的開發(fā)人員提供熟悉的編碼體驗(yàn);
2、Service和View的分離和并行實(shí)現(xiàn)可以防止JS執(zhí)行影響或減慢頁面渲染,這有助于提高渲染性能;
3、因?yàn)镴S在Service層執(zhí)行,所以JS里面操作的DOM將不會對View層產(chǎn)生影響,所以小程序不能操作DOM結(jié)構(gòu)的,這也使得小程序的性能比傳統(tǒng)的H5更好。
FinClip 提供了Flutter SDK,支持在 Flutter 環(huán)境使用小程序;以滿足 Flutter 和小程序混編的效果。