Google 路線圖:Flutter 與 JavaScript、Wasm 集成

infoq 發佈 2024-05-10T03:57:52.826687+00:00

作者 | Sambodhi策劃 | Tina在肯亞首都奈洛比舉行的 Flutter Forward 會議上,谷歌為其 Dart 框架 Flutter 制定了雄心勃勃的路線圖,其中包括支持 WebAssembly 的計劃。這家網際網路巨頭正在尋求其開發者社區幫助制定這一計劃。

作者 | Sambodhi

策劃 | Tina

在肯亞首都奈洛比舉行的 Flutter Forward 會議上,谷歌為其 Dart 框架 Flutter 制定了雄心勃勃的路線圖,其中包括支持 WebAssembly 的計劃。這家網際網路巨頭正在尋求其開發者社區幫助制定這一計劃。它還發布了 Dart 3.0 和 Flutter 3.7,後者支持更多的 Material You 小部件和菜單。另外,還包括一整套 Material 3(Material You)小工具。為了體驗 Flutter 中新一代 Material Design 的無窮潛力,谷歌還準備了一個有趣的 Web 展示,用戶甚至可以在 Material Theming 和 Material You 之間進行切換。


Flutter 是谷歌的開源移動用戶界面框架。對 Flutter 的升級計劃包括編譯成 WebAssembly 的能力、改善圖形性能、 實現 JavaScript 和 Dart 之間的互操作性,以及將 Flutter 組件添加到 Web 應用中的能力。目前它還支持安卓、 iOS、 Windows、 macOS、 Linux 和 Web,同時還支持嵌入式平台使用 Flutter。


谷歌正在尋找新的途徑,以將 Flutter 應用程式與底層作業系統或者平台整合。在安卓和 iOS 方面,Flutter 團隊正在重塑平台原生插件的創建方式。iOS Flutter 開發人員很快就可以使用 Dart 的 FFI 直接調用 Objective-C 和 Swift 代碼,而無需通過「平台通道」將消息傳遞給本地代碼。同樣地,安卓上的 Flutter 將能夠使用 JNI 來調用 Kotlin 代碼。


對於 Flutter Web 應用,一個新的「js」庫使得從外部頁面的 JavaScript 代碼調用應用程式的 Dart 代碼變得很容易。與此相關,你現在可以通過一個標準的 HTML div 將 Flutter 視圖嵌入到頁面中。這些都可以在一個有趣的演示頁面中看到。



從上圖可以看到,Flutter 3.7 為應用程式創建菜單新增了一個新的支持,比如對 macOS 菜單的原生支持,新的級聯菜單部件,還有向右鍵/長按上下文菜單添加項目的功能。安卓和 iOS 上的內置文本放大鏡現在也可以像預期的那樣處理 Ffltter 的文本欄位。你可以在完整的發布博客中了解更多關於 Flutter 3.7 的改進。


Flutter 和 Dart 的產品和用戶體驗總監蒂姆·斯尼斯(Tim Sneath)告訴 The New Stack(TNS): 「我們確實在努力引導人們,我們之所以這樣做,是因為我們想讓更多的人加入到這個項目中,並且它是一個開源項目。我們想讓大家都參與進來,Flutter 上有將近半數的貢獻者並不在谷歌工作,他們是在別的公司或者社區里工作。通過制定路線圖,他們就有機會加入到我們的行列來。」


據斯尼斯的說法,Flutter 從一開始在安卓和 iOS 上的默默無聞發展到了可以為移動、桌面、Web 等開發應用,所有這些都來源於 Dart 代碼庫。自從它問世以來,在不同的平台上,已經有超過 70 萬個 Fluter 應用程式,從初創公司到寶馬、豐田這樣的大型企業,這些應用程式的使用範圍各不相同,而且在谷歌內部,也有大約 30 個不同的項目應用了 Flutter,比如 Google Classroom(谷歌課堂)、Google Pay(谷歌電子錢包)。


谷歌還發布了 Flutter 3.7,這是一個穩定版本,在 iOS 上增加了一個新的渲染引擎,增強了對 Material 3 和 iOS 風格小部件的支持,加強了對國際化的改善,改善了後台處理,更新了開發者工具。


但是,斯尼斯稱,此次會議和公告的重點都集中在下一年的路線圖上。接下來,讓我們看一看 Flutter 希望在未來一年進行的革新。


將 Fltter 與 Web、JavaScript、WASM 集成


「我們正在努力使 Flutter 與其他代碼的集成變得更加容易,無論它是一個擁有系統 API 的移動應用程式,還是你希望把一些 Flutter 代碼添加到你已經寫好的 Web 體驗中。」斯尼斯說,「我們在這裡所做的一切,都是為了讓 Flutter 能夠更好地與其他可能被編寫的東西進行對話,因為這個世界上並不是所有的代碼都是 Flutter。」


他表示,這就意味著 Flutter 的組件現在可以放到網站中,這樣,開發者就可以將 CSS 轉換(如反射效果)應用到 Flutter 組件中。


Flutter 與 JavaScript 的互操作性現在也提高了。


「你可以通過 JavaScript 驅動 Flutter 小部件,反之亦然,」他說,「你可以從 JavaScript 端讀取一些來自 flutter 的數據,這樣就有了一些新的機會。」


谷歌也正在尋找一種新的方式來集成系統 API,這樣可以降低在安卓和 iOS 的集成中需要自定義的代碼需求。比如,如果有了一個新的安卓 jetpack 庫或者蘋果庫,那麼開發人員想與之集成,他們可以調用一個新的 Dart 命令,它將自動生成所有的綁定,「只需很少的儀式或代碼」就可以直接與這些 API 對話,斯尼斯說。


然後就是 WebAssembly。斯尼斯說,WebAssembly 最初並不支持像 Dart 這樣的垃圾收集語言,所以 Google 與 WebAssembly 團隊和 Chrome 團隊合作,以支持此類語言。雖然現在還沒有被所有的瀏覽器所支持,但可以在谷歌為開發者開發的瀏覽器 Chrome Canary 上使用。


他補充說,這可能要到今年晚些時候才能得到全面的支持。


「Dart 是最早採用這種方法的框架之一,」他說,「我們可以利用這一點,使 Flutter 應用程式現在可以編譯成 WebAssembly。這意味著它們會啟動得更快,它們將更容易與其他語言編寫的代碼集成,我們也樂意看到人們用它來做什麼。」


谷歌在使用 WebAssembly 編譯 Dart 應用程式方面取得了長足進步。這可不是一項小任務,因為 WebAssembly 最初並不支持像 DART 這樣具有垃圾收集功能的語言。隨著時間的推移,這應該會給 Web 上的 Flutter 帶來明顯的性能提升。


最後就是,Flutter 現在開始支持開源架構標準 RISC-V。Dart 團隊的最終目標是讓 Flutter 應用程式能夠在 RISC-V 上運行。


「目前還沒有多少基於 RISC-V 的物理硬體,但我們相信這是未來下一代工藝的一部分。」斯尼斯說。


改進的移動圖形性能,支持 3D


斯尼斯在 1 月 26 日發表在 Mudium 的一篇博文中說,過去的時候,由於創建抽象層的挑戰,所以跨平台框架必須要在視覺效果上有所折衷。


「Flutter 採取了一種與大多數不同的方法,它有自己的渲染層,可以在每台設備上提供硬體加速圖形和一致的視覺外觀,」 他寫道, 「展望未來,我們將投資於突破性的圖形性能,以擴展 Flutter 在這一領域的現有實力。」


他在接受 TNS 採訪時表示:「我們正在向極限發起挑戰。最近幾個月,我們對整個圖形渲染流水線進行了重新設計,這個項目就叫做 Impeller。Impeller 的設計旨在提升性能,同時也確保了鑄鐵般的不掉幀,以及真正高質量、絲般順滑的體驗。」


谷歌在會議上提供了對 Impeller 的早期支持。這個演示視頻顯示,左邊是傳統的 Flutter 渲染引擎,右邊是新的 Impeller 渲染引擎。在 iOS 版的 Flutter 3.7 上,Impeller 帶有選擇加入標誌。


Imeller 針對 Flutter 進行了優化,為開發人員提供了更多的靈活性和對圖形管道的控制。斯尼斯在博客文章中解釋說,Imeller 通過使用預編譯的著色器來提供更可預測的性能,這些著色器可以緩解因著色器編譯而導致的運行時丟幀。它使用了 Metals 和 Vulkan 中的原語,這是 iOS 和安卓中的現代低級 API。它還「有效地利用了並發性,將單幀工作負載分布在線程之間。」他補充道。


「在一些案例中,Impeller 為我們提供了比以前的圖形引擎高出六到九倍的性能,」他說。「但除了性能或絲滑的質量之外,這也讓我們看到了一種新的體驗,我們相信,人們會希望去創造。」


現在有了對像素著色器的支持,這是一種編寫低級圖形 GPU 函數的能力,該函數在 Web 和行動裝置上的屏幕上的每個像素上執行。他還說,它可以實現模糊效果以及其他圖形處理體驗。


他還表示,谷歌也已經開始了用 Flutter 支持 3D 的早期工作。他說,會議演示了如何導入使用 Blender 創建的模型,以及如何使用熱重新加載來與 Blender 實時疊代並在運行的應用程式上查看結果。



他說:「我們正在進入 3D 世界,現在通過 Flutter 支持 3D 圖形。這真的是我們的下一代——一個全新的維度。這意味著,你可以使用傳統的 3D 工具,比如 Blender,你可以創建模型,3D 網格。你可以將它們導入 Flutter,然後你可以像其他代碼一樣編程和使用它們。」


他解釋說,這是由 Flutter 編程的 Dart 代碼啟用的。它可以在各種設備運行,甚至在 2014 年發布的 iPhone 6 上也可以運行。


「能看到 2D 和 3D 圖形的結合真是太有意思了,從過去的經驗來看,這些都是不同的領域、不同的技術、不同的語言,」他說道,「現在,我們正在把這些都結合在一起,我們很高興看到,當你把這些東西結合在一起時,會發生什麼。」


改善 Dart、Flutter 開發人員的經驗


斯尼斯還補充說,谷歌當周還發布了 Dart 3,其中包括新的語言特性,以改善開發人員的體驗。Dart 3.0 現在可以進行早期 alpha 測試,重點是要求健全的空安全。他說這是編寫 bug-free 代碼的關鍵因素。


「Dart 3 還移除了其他長期不被推崇的特性,以進一步實現語言的現代化,」斯尼斯解釋說。「我們已經開始發布 Dart 3 的 alpha 質量版本,以及與之匹配的 Flutter 版本,使開發人員能夠測試軟體包和應用程式。」


在 Flutter 方面,谷歌發布了它的首個 News Toolkit 版本,目標客戶是那些希望提供移動應用程式、但缺乏開發資源的地區性新聞出版商。白標籤解決方案提供模板來幫助構建移動應用程式。谷歌與三家非洲新聞機構合作推出了它,其中包括摩洛哥最大的出版商和肯亞《旗幟報》(The Standard)。


斯尼斯強調,並不是所有的工作都完成了,但它們都是可行的。


「我們將在這裡展示一些非常早期的演示,但這基本上是我們作為一個團隊的未來方向的門戶。」他說。


總體而言,Flutter 框架顯然仍在處於高速發展狀態,朝著完美的「一次編寫,到處運行」應用程式和遊戲的夢想越來越近。

參考文章:

https://thenewstack.io/google-roadmap-flutter-to-integrate-with-javascript-wasm/

https://9to5google.com/2023/01/25/flutter-forward-teaser/

相關閱讀:

經驗分享|用 Flutter 如何開發一個可運行小程序的 App

用 Flutter 開發真的可以為所欲為

軟體測試 | JavaScript 如何使用

雲原生 Wasm 的開發者工具正在成為主流


本文轉載來源:

https://www.infoq.cn/article/OoAHFuPeteKTOsQv849S

關鍵字: