Flutter Monthly #2024/08

Flutter Taipei
Flutter Taipei
Published in
8 min read1 day ago

筆者因籌備 Flutter 研討會一直沒整理好發出去 希望能繼續下去

官方訊息

Flutter 3.24

這次與以往不同,在 Google I/O Connect China 發布了 Flutter 最新穩定版本 3.24。這次推出了一些新的 Sliver Widget 與 Cupertino (iOS style) 的 Widget,也將先前在 `two_dimensional_scrollables` 套件中的實作 TableView 和 TreeView 整合進了 Flutter SDK 中。

Impeller 改善效能與在特定語言的文字精確度,但原先要這次穩定版發布的 Impeller Android 版本,因為 Android 14 / 15 Platform View 會在背景回來時停止,這個版本保持為預覽版本。另外在年初 Roadmap 也有提及的支援多畫面/視窗,首個為 Fluttter Web 可以在既有的 Web 嵌入,稱 Flutter Web 多畫面嵌入。另外為了更加支援 Apple 開發生態系統,這次也最初支援 Swift Package Manager,但目前只能在 main channel 使用。

Flutter GPU

在 Flutter 開始將底層的 Engine 從 Skia 改成 Impeller,Impeller 透過 SPIRV 意味著可更加支援底層的圖形 API,像是 3D 相關的圖形處理。目前最初是先從套件 flutter_scene 整合至既有專案,Flutter 版本必須在 main channel,平台目前只支援在 iOS、Android 及 macOS 上使用,這次官方部落格文章有提供基本範例,在目前專案測試使用。目前 Flutter GPU 仍在早期預覽階段,目前只支援基本的 rasterization API,透過更多可以參考官方文件

Dart 3.5

與 Flutter 3.24 同時推出的 Dart 最新穩定版本 3.5,主要有兩個更新:

1. 新版 JavaScript interoperability(互操作性) 穩定版本。

2. 原生語言互操作性。

在上一個穩定版 Dart 3.4 支援編譯到 WebAssembly,在新版本 Dart 與 JavaScript 的互操作性的新版 API package:web 也正式發佈 1.0 版本,接下來也會在下一版棄用舊版相關的 API: dart:html、dart:js、package:js,其 Dart 3.5 的 lint 也支援檢查互操作性類別是否正確。原生語言互操作性,像是 C、Java、Kotlin、Objective-C 和 Swift,測次更新 C FFI 允許直接將 Dart 的 TypedData 物件透過指標直接傳遞給 FFI,避免 Dart 到原生第一次需要複製記憶體。

JNIgen 改進了效能,並增加對 Java exceptions 和 Kotlin 頂層函數的支持。增加了對 Objective-C protocols 和常用類型像是 NSString 的支援。關於雙平台在原生語言互通性,官方套件 cupertino_http 有典型實作可以參考。

DevTools extensions | Observable Flutter #49

這次邀請了 Flutter’s DevTools tech lead — Kenzie Davisson,介紹了 DevTools extensions 功能的概念,以及如何開發和使用 DevTools extensions。更多關於可以參考官方文件及先前官方影片

Flutter Taipei 社群活動

Flutter 小聚 #16 回顧

這次 Flutter 大小事由組織者 房志剛 Rainer 跟大家分享,主要著重在這個 Flutter 3.24 與週邊議題。

Flutter 小聚 #16

若對小聚有興趣分享,可以填寫表單或是聯絡社團的組織者報名投稿~

社群話題

Flutter Web 將棄用 HTML renderer

有鑒於 Flutter 在 3.22 版本 Web 開始支援編譯至 WebAssembly,預期將在接下來版本棄用最早支援的 HTML rendar,未來只會有 WebGL-based CanvasKit 及 Skwasm 兩個版本可供 Flutter Web 建置發布模式的輸出,詳細進度可以看官方文件issue

小米在 Flutter 的使用案例

在這次 Google I/O Connect China 發表 Flutter 3.24 時,也同時分享了小米在 Flutter 的使用案例,在自家小米汽車應用程式(App)採用 Flutter 開發,同時在車子搭載的平板使用的 App 也是同為採用 Flutter 開發。團隊表示 Flutter 比使用原生框架的效率要高 60%,這要歸功於 Hot-Reload 等功能,使他們能夠快速迭代功能並賦予了設計師們實現創意的力量。

https://www.youtube.com/watch?v=wfD7ZQhwACU

Purrfect Code: A Puzzle Game for Developers

「Purrfect Code」是一款全新的推箱子程式設計益智遊戲,透過撰寫 JavaScript 來引導機器人將貓推到傳送板上的遊戲,使用 Flutter 開發其中更利用了 Flame 遊戲引擎幫助遊戲相關的整合。其中的遊戲中操作的 JavaScript 則是因為在 Chrome 不需要額外的語言互操作性(interpreter),被選為遊戲操作指令的程式語言。 開發環境也可透過 Project IDX:將「Purrfect Code」的開發環境透過 Google 的 Project IDX ,直接在線上平台撰寫遊戲並測試,最終可透過 Firebase Hosting 部署網頁,官方部落格有更完整介紹。

FlutterFire iOS 最低支援版本正式提升至 iOS 13

在 Flutter 使用 Firebase 時會使用到源自於社群發起的 FlutterFir,雖然現在已經轉由 Firebase Team 維護。在使用上因為 Firebase 有著不同的子服務,在 Flutter 使用上會因為套件之間原生設定不同導致設定困難,在去年有一份文件,紀錄著對應的相容版本,稱之為 Flutter BoM(此 BoM 與 Android 原生不同,只是概念類似)。

BoM 2.0 版本時就已經將所有套件 iOS 目標版本提升至 iOS 13,其對應是即將到來的 Firebase iOS SDK 11.0 的設定。但實際上是在 BoM 2.5 對應的 iOS SDK 版本才是 11.0,在原生設定上需要特別注意,其對應裝置雖然 Flutter 3 仍最低支援 iOS 12,會影響到 iPhone 6 及 iPhone 6S。

Safari Preview 202 支援 WebAssembly GC

在 Dart 支援可編譯成 WebAssembly(Dart2Wasm)後,首要影響的 Flutter Web,但因 Dart 本身有 Garbage Collection 的機制,導致編譯至 WebAssembly 必須也有 WebAssembly GC 的機制(WasmGC 稱之)。在起初去年九月開始,支援的瀏覽器也只有 Chromium 119 及 Firefox 120 以後版本,社群也持續關注有哪些瀏覽器會支援 WebAssembly GC,由其市佔第二基於 WebKit 的 Safari 大家最矚目的。

在這個月底的 Safari 預覽版 202 公開了支援 Web Assembly 相關內容(WebKit PR),其中就有 WasmGC。也有社群開始測試 Flutter 支援程度在官方 Repo 回報,官方也有回覆目前進度與缺少的 API,接下來也期待接下來有更完整支援。

接下來的全球 Flutter 活動

從九月開始,全球各地都會迎來技術研討會盛行的季節,以下幫大家整理幾個 Flutter 相關的研討會。

  • Flutter & Friends 為社群舉辦的雙軌會議。最後參加動手研討會和大型獎勵黑客馬拉松。地點:瑞典斯德哥爾摩。
  • FlutterCon USA 將有來自 Google 開發者專家和 Flutter 專家深入的技術演講、研討會和小組討論。地點:紐約市,紐約。時間:2024 年 9 月 19 日至 20 日。
  • Future Flutter 將是韓國舉辦的大型 Flutter 焦點會議。地點:韓國仁川。時間:2024 年 9 月 28 日。
  • FlutterConf LATAM 將是一個為期兩天的會議,設有多軌會議和一流的演講者。地點:秘魯阿雷基帕。時間:2024 年 10 月 29 日至 30 日。
  • FlutterconKE 將是肯亞的 Flutter 焦點會議。地點:肯亞待定。時間:2024 年 11 月 6 日至 8 日。

Flutter Formosa 2024 議程公開

籌備已久的 Flutter Formosa 雖然議程表是在 9/1 公告,但其實已經在小聚與各位揭露,期待大家 9/7 一同共襄盛舉。

整理與製作:房志剛(Rainer) & IgnacioZhang(斌權)

校稿:Ahdaa

--

--