【文章翻譯】What's new in Flutter 3.50

【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】

原文:https://flutter.dev/blog/whats-new-in-flutter-3-50

Flutter 3.50 有什麼新功能

投資 Flutter 的下一個十年

Flutter 3.50 已全面就緒,並與 Dart 3.14 同步推出。此版本帶來了一系列更新,展示了 Flutter 的下一步發展方向。直接原生互通現已穩定,讓您可以在 Dart 和原生平台 API 之間進行呼叫。Safari 和 Firefox 上的 WebAssembly 速度更快,加上瀏覽器原生文字佈局,為 Flutter 網頁應用程式帶來了顯著的速度提升。我們還擴展了用於自訂硬體的平台嵌入器 API,現在獨立的 material_ui 和 cupertino_ui 套件是新專案的預設設定。

一如既往,如果沒有 Flutter 社群以及您在框架和生態系統中的所有貢獻,我們將無法完成這一切。僅在此發佈週期中,就有 188 位貢獻者,其中包括 69 位首次貢獻者,提交了超過 1,200 次提交。因此,在您的終端機中執行 flutter upgrade 以獲取最新版本,或繼續閱讀以探索新功能。

直接原生互通性

去年,我們分享了 直接原生互通性 的願景,以消除傳統平台通道的序列化開銷、基於字串的管道和強制性非同步延遲。在 Flutter 3.50 中,這項多年的投資達到了生產就緒狀態:適用於 Objective-C 的 FFIgen 和適用於 Java 和 Kotlin 的 JNIgen 加入了 FFIgen 長期以來的 C 語言支援,成為穩定版本。您還可以預覽 Pigeon 的新原生互通模式,該模式使用兩個生成器在底層建立型別安全的繫結。

對於任何原生整合,您現在可以跳過平台通道訊息傳遞,並在 Dart 和平台程式碼之間直接呼叫,包括同步呼叫或從背景隔離區呼叫。使用 FFIgen 繫結 C 和 Objective-C API,或使用 JNIgen 繫結 Android 系統 API 和 Flutter 和 Dart 應用程式中的自訂 Java 或 Kotlin 函式庫。在建構多平台外掛程式時,Pigeon 的原生互通模式會自動處理 iOS、macOS 和 Android 上的資料轉換和原生生命週期。

Diagram comparing traditional MethodChannels serialization with direct generated JNI and FFI host API calls.
直接原生互通性跳過了平台通道序列化,透過 FFI 和 JNI 直接呼叫原生 API。

感謝所有套件作者、貢獻者和早期存取計畫參與者,特別是 Jon Holtan、Rody Davis、Dominik Roszkowski、Alexander Thiele 和 Morgan McKenzie。這些社群成員測試了早期版本、審查了文件並幫助塑造了這些 API。請持續關注有關直接原生互通的專門文章。

了解更多:原生互通文件

網路平台

在網路上,Flutter 3.50 將更快的跨瀏覽器 WebAssembly 執行與內建資產快取清除、現代 JS 互通性檢查以及更小、瀏覽器原生的文字渲染結合在一起。

Safari 和 Firefox 上的 WebAssembly

執行 flutter build web --wasm 會將您的應用程式編譯為 WebAssembly 和 JavaScript,在舊版瀏覽器上會自動回退到 JavaScript。基於 Chromium 的瀏覽器(Chrome 和 Edge 137+)預設已經執行 WebAssembly。在 Flutter 3.50 中,**Safari 26.2+**(macOS 和 iOS)和 Firefox 147+ 在重度 Widget 基準測試中的影格率是 JavaScript 的兩倍以上,您今天就可以在 web/flutter_bootstrap.js 中選擇啟用,它們將在未來的穩定版本中預設啟用:

1
2
3
4
5
6
7
8
9
10
11
{{flutter_js}}
{{flutter_build_config}}
_flutter.loader.load({
config: {
wasmAllowList: {
blink: true,
webkit: true,
gecko: true,
},
},
});

了解更多:WebAssembly (Wasm) 支援

內建的網頁內容雜湊

部署更新後的 Flutter 網頁應用程式可能會導致回訪的使用者在瀏覽器中快取過時的 JavaScript 或不匹配的資產。將 --web-content-hash 傳遞給 flutter build web 可以解決此問題,它會將內容雜湊嵌入到您編譯的 JavaScript、WebAssembly 和 build/web/assets/** 檔名中,並自動更新 flutter_bootstrap.js。這讓您可以快取雜湊的應用程式套件和資產長達一年(Cache-Control: public, max-age=31536000, immutable),同時將 index.html 和 flutter_bootstrap.js 保留在 no-cache 上,以便每次部署都能乾淨地載入。此標誌還會生成 build/web/precache_manifest.json 用於自訂服務工作者和 Workbox 管道,取代已棄用的 flutter_service_worker.js 標記。

了解更多:網頁內容雜湊和 HTTP 快取

稽核網頁上傳統的 JS 互通性

Flutter 網頁應用程式和外掛程式使用 JS 互通函式庫來存取瀏覽器功能,例如本機儲存或包裝第三方 JavaScript SDK。Dart 舊的純 JS 函式庫(dart:html、dart:js、dart:js_util 和 package:js)現在已棄用,改用 dart:js_interop 和 package:web。這些現代替代方案適用於 JavaScript 和 WebAssembly 建置,而傳統函式庫將在未來的 Dart 版本中移除。將 --no-deprecated-js-interop 傳遞給 flutter build web、flutter run 或 flutter test --platform chrome 以捕捉過時的 JS 匯入。如果您的應用程式或其任何套件仍然依賴傳統瀏覽器函式庫,這會在早期建置失敗,幫助您為 WebAssembly 做準備。

了解更多:使用相容的 JS 互通函式庫 和 宣布 Dart 3.14

原生瀏覽器文字佈局預覽

與 Chrome 團隊合作,在 Chrome 的實驗性 Enhanced TextMetrics API 上構建,WebParagraph 讓瀏覽器直接在畫布上塑造作業系統字體,而不是捆綁 C++ 字體解析器。將文字佈局委派給瀏覽器可以縮小 CanvasKit 下載(從 5.46 MB 縮小到約 3.75 MB),消除後備字體的網路請求,防止國際腳本中缺少字元方塊,並渲染原生彩色表情符號。

了解更多:WebParagraph 實驗預覽 (#172561)

可插入平台

繼我們在 Google I/O 上宣布可插入平台 之後,我們持續讓 Flutter 更容易移植到新的作業系統和硬體。在 Flutter 3.50 中,我們填補了底層 Impeller 和 Vulkan 嵌入器 API 中的兩個關鍵空白。社群貢獻者 xiaowei-guan 增加了 Vulkan 外部紋理支援,因此自訂嵌入器可以 直接將紋理傳遞給引擎,以便在 Impeller 和 Skia 後端進行採樣。自訂嵌入器現在可以呼叫 FlutterEngineNotifyLowMemoryWarning,以便在記憶體壓力下立即 清除 Impeller 的離螢幕渲染目標快取。

解耦設計套件

在 Flutter 3.47 中推出獨立的 material_ui 和 cupertino_ui 1.0 版本之後,Flutter 3.50 正式棄用了耦合的 package:flutter/material.dart 和 package:flutter/cupertino.dart 函式庫,以及它們在 package:flutter_localizations 中的本地化委派。使用 flutter create 建立的新專案現在預設匯入 package:material_ui。

Diagram showing migration from bundled SDK material.dart and cupertino.dart libraries to standalone material_ui and cupertino_ui packages on pub.dev using dart fix --apply --code=migrate_design_widgets.
使用 dart fix 從捆綁的 SDK 設計函式庫遷移到獨立的 material_ui 和 cupertino_ui 套件。

執行 dart fix --apply --code=migrate_design_widgets 自動更新現有匯入和本地化委派。

了解更多:Material 和 Cupertino 遷移指南 和 解耦 Material 和 Cupertino

框架

在核心框架中,社群和團隊的貢獻加入了 sliver 裁剪 Widget、更穩定的文字選取、邏輯圖片快取、無障礙功能改進和桌面多視窗更新。

捲軸和 sliver

社群貢獻者在 Flutter 3.50 中為自訂捲軸視圖提供了出色的升級。 Emmanuel Lefebvre Dibon 加入了 SliverClipRect 和 SliverClipRRect,並帶有 clipOverlap 選項,可以在不切斷固定標頭的情況下圓角或裁剪捲軸部分。 Mairramer 為 ListView.separated 加入了 itemExtentBuilder,因此帶有分隔線的列表可以按需調整可變高度行的大小,而無需建立離螢幕 Widget。Mairramer 還引入了 ScrollPhysics.shouldUpdate,以便應用程式可以在設定變更時動態更新捲軸行為。 Soroush Yousefpour 更新了 RawScrollbar.mouseCursor,僅在捲軸條拇指和軌道上方變更滑鼠指標,保持附近內容的標準游標。框架修復現在停止 Scrollable.ensureVisible 在顯示固定標頭所需的確切偏移量處,而不是捲軸過去。SliverFillRemaining 現在在捲軸視圖的末尾準確計算過度捲軸拉伸偏移量。最後,TreeSliver 清晰地裁剪擴展和折疊分支,因此動畫子行永遠不會與鄰近項目重疊。

Animated demo of SliverClipRRect clipping scrolling sliver content to rounded corners.
SliverClipRRect 在不切斷固定標頭的情況下圓角和裁剪捲軸部分。

文字輸入與選取

現在,在行動裝置、網頁和桌面平台上,文字編輯和選取都明顯更加穩定。 Alex Li 為 TextInputType.numberWithOptions 加入了 password 選項,以便 Android 應用程式可以開啟安全的數字鍵盤進行 PIN 碼輸入。Android 應用程式還可以使用 AutofillHints.emailOTPCode 自動填寫電子郵件中的一次性驗證碼。新的 Hyphens 列舉可讓您控制當文字換行時是否可見軟連字號。 Nicodemus Lin 阻止了當使用者在多行文字中拖曳頂部選取手柄時螢幕跳動。 Nickolas de Luca Alberton 修正了置中和右對齊單行文字欄位中的上下箭頭鍵游標移動。在 PageView 內拖曳選取文字不再會意外翻轉到鄰近頁面。選取手柄在混合從左到右和從右到左的文字時也保持指向選取的文字。

圖像與繪圖 API

社群貢獻者也完善了 Flutter 的圖片載入和快取 API。 Kishan Rathore 為 DecorationImage 加入了 placeholder ImageProvider,以便容器背景在載入時可以顯示備用圖片。 Anas Saifi 加入了 FadeInImageTransition.fadeInOver,用於在不出現空白閃爍的情況下,在不透明的佔位符上平滑淡入圖片。 Koji Wakamiya 在 ResizeImage 上加入 useLogicalSize,並在 Image 上加入 useLogicalCacheSize,以在不需要 BuildContext 的情況下將快取圖片縮放到螢幕密度。 Ishaq Hassan 在 RawImage 上公開了 blendMode,因此自訂 Widget 可以在繪製圖片時直接應用顏色混合效果。自訂 BoxBorder 形狀現在可以在動畫期間在狀態之間平滑過渡。使用 HSVColor.lerp 和 HSLColor.lerp 的顏色動畫現在會沿著色輪的最短路徑移動,避免了意外的顏色偏移。

Animated demo of DecorationImage displaying blurred placeholder cards before loading crisp full-resolution images.
DecorationImage.placeholder 在容器背景圖片載入時顯示備用圖片。

無障礙功能與導覽

Flutter 3.50 改善了跨平台的鍵盤導航、螢幕閱讀器支援和對話框自訂。自訂滑塊 Widget 現在可以使用 SemanticsRole.slider,以便螢幕閱讀器準確地宣布其值和控制項。應用程式可以檢查 MediaQueryData.reduceMotion 以檢測使用者的「減少動態」設定,並將滑動動畫替換為輕柔的淡入淡出效果。按下 Escape 鍵現在會關閉打開的 Tooltip 和 RawTooltip 疊加層,而無需移動鍵盤焦點,符合網路無障礙標準。在網路上,VoiceOver 和 WidgetsApp.router 修正可使螢幕閱讀器和鍵盤焦點在疊加層內保持穩定,而不會意外重設。 Ishaq Hassan 在 FocusableActionDetector 上新增的 skipTraversal 選項可讓自訂互動式 Widget 選擇退出 Tab 鍵導航。對於對話框, Mairramer 在 showDialog 上新增的 barrierBuilder 回調可讓您自訂模態背景,例如新增背景模糊。最後,Navigator.popUntilWithResult 現在會將其結果返回到最後彈出的路由,即使目的地路由具有本機歷史記錄條目。

桌面視窗化

與 Canonical 合作,並感謝維護者 Robert Ancell、Matthew Kosarek 和 Matej Knopp,Flutter 的實驗性多視窗桌面 API 在 Linux、macOS 和 Windows 上持續成熟。在 Linux 上,應用程式可以使用 WindowControllerLinux 建立自訂標題列、透明視窗和原生拖曳移動或調整大小控制項。在 macOS 上,視窗和對話框可以在出現之前調整自身大小以適應其內容,從而防止在啟動時出現可見的調整大小閃爍。在所有三個桌面平台中,RegularWindow 現在被命名為 Window 以簡化多視窗程式碼。其 shrinkWrap 屬性也取代了 sizedToContent 以符合 Flutter 熟悉的佈局命名。最後,WindowManager 現在位於 WidgetsApp 之上,因此輔助視窗可以執行自己的獨立 UI 和導航狀態。

Screenshot of the Flutter Multi-Window Reference Application on macOS showing a main window and secondary dialog window.
macOS 上執行的多視窗桌面參考應用程式。

引擎

在內部,Flutter 3.50 擴展了 Impeller 的硬體加速原始渲染,改善了行動 GPU 的穩定性,並提升了 Windows 和 Linux 的圖形保真度。

Impeller 渲染

Impeller 適用於 macOS、Linux 和 Windows 的符號距離場(SDF)渲染器直接在 GPU 上繪製清晰的邊界、形狀和漸層,而不是在 CPU 上計算複雜的幾何圖形。這降低了影格渲染時間並保持捲動和動畫流暢,即使在充滿卡片、邊框和陰影的螢幕上也是如此。Flutter 3.50 將此快速路徑擴展到線條、細邊框、圓角和漸層,同時加速 macOS 漸層和重複的文字陰影。對於自訂 3D 場景和 2D 遊戲,Flutter GPU 增加了對 2D 紋理陣列的支援。遊戲和圖形開發人員現在可以將精靈圖集、圖塊地圖和地形層批次處理成更少的繪圖呼叫,而不會在圖塊之間出現視覺縫隙。當著色器管道配置錯誤時,Flutter GPU 還會報告更清晰的 Dart 錯誤訊息,幫助您更快地捕捉和修復圖形錯誤。

Side-by-side zoomed pixel comparison showing smooth anti-aliased diagonal edges rendered with Impeller SDF versus stepped edges with MSAA.
Impeller 的 Signed Distance Field (SDF) 渲染器直接在 GPU 上繪製清晰、抗鋸齒的邊緣。

社群貢獻者也帶來了高影響力的 OpenGL 啟動和 GPU 穩定性修復。 xiaowei-guan 將 OpenGL 著色器設定移至背景執行緒,以便應用程式更快地顯示其第一幀。 seunggi 解決了載入紋理時的 Mali GPU 崩潰問題,防止受影響的 Android 設備上應用程式意外退出。 krll-kov 修正了舊設備上的 OpenGL ES 2 紋理渲染,並在動畫圖片中保持了跨幀的透明度。Flutter 也會在 B 系列 PowerVR GPU 上自動從 Vulkan 回退到 OpenGL,以防止渲染故障。

桌面圖形

在 Windows 和 Linux 上,桌面渲染獲得了關鍵的保真度和效能升級。Windows 引擎現在預設請求 OpenGL ES 3,同時保留自動 OpenGL ES 2 回退支援,解鎖了現代圖形功能,而不會丟棄舊的 PC。Windows 應用程式現在可以從包含非 ASCII 字元的路徑(例如國際使用者名稱或資料夾名稱)載入資產和檔案。Windows 還以改進的對比度渲染更清晰的文字,並跳過每個畫面額外的全螢幕複製以減少 GPU 開銷。在 Windows 和 Linux 上,改進的抗鋸齒平滑了分層 UI 元素和自訂形狀上的鋸齒邊緣。

iOS 和 macOS

作為 Xcode 27 和 iOS 27 發佈以來的第一個穩定版本,Flutter 3.50 減少了 iOS 觸控延遲,平滑了實體設備除錯,並持續從 CocoaPods 和 Intel Mac 遷移。

更快的 iOS 觸控反應

由社群成員 Matej Knopp 貢獻,對引擎如何安排 iOS 觸控事件後的幀生成方式進行了重大改造,將觸控事件立即傳遞給框架,以便幀在相同的顯示刷新中建立,而不是等待下一個 vsync。結果是輸入延遲減少了一個完整的幀(60 Hz iOS 設備上快 16 毫秒,120 Hz ProMotion 顯示器上快 8 毫秒),透過對追溯到 2015 年 iPhone 6s 的硬體進行廣泛基準測試進行驗證。我們還有更多工作正在進行中,以在即將推出的版本中進一步降低 iOS 輸入延遲。請持續關注。

Side-by-side comparison showing faster iOS touch response in Flutter 3.50.
Flutter 3.50 中更快的 iOS 觸控排程將輸入延遲減少了一個完整的幀。

了解更多:iOS 觸控輸入延遲基準測試 (#191199)

在 iOS 27 上除錯

在新的配對或新升級的 iPhone 上運行應用程式不再會停留在白屏上,直到您開啟 Xcode 一次。Flutter CLI 現在會自動準備設備,並在準備失敗時告訴您該怎麼做。Flutter 3.50 還解決了在 iOS 27 設備上運行 flutter run 時間歇性啟動崩潰的問題。使用 Xcode 27 進行建置,自 iOS 17 以來首次在實體 iPhone 和 iPad 上恢復了 flutter screenshot。您現在可以在除錯期間直接從終端機捕獲正在運行應用程式的螢幕截圖。

Swift Package Manager 過渡

隨著 CocoaPods trunk 將於 2026 年 12 月變為唯讀,Flutter 的臨時 CocoaPods 後備方案正在逐漸停止。從 Flutter 3.50 開始,停用 Swift Package Manager 會在每個 Flutter CLI 命令上觸發警告。在未來的版本中,我們將移除選擇退出標誌,最終也將移除 CocoaPods 後備方案本身。如果您之前為了解決建置問題而停用了 Swift Package Manager,請立即重新啟用它以驗證您的設定。

了解更多:Swift Package Manager for plugin authors

Apple Silicon macOS 建置

Flutter 不再在 Intel Mac 硬體上進行測試,並且當您在 Intel Mac 上建置時,CLI 現在會發出一次警告。當未來版本移除 Intel Mac 主機支援時,為 iOS、macOS 或 Android 建置將需要 Apple Silicon Mac。因為 Xcode 27 不再要求 macOS 應用程式捆綁 Intel 切片,您現在可以透過執行 flutter config --enable-macos-arm64-only 來建置僅限 Apple Silicon 的 macOS 應用程式,它將在即將推出的版本中成為預設設定。

了解更多:macOS Intel 棄用策略

Android

在 Android 上,Flutter 3.50 強化了發佈模式 Intent 安全性,擴展了平台視圖的混合合成++,並解鎖了對 Android Gradle Plugin 9 新 DSL 的選擇加入支援。

Intent 安全強化

以前,使用 Flutter 建置的 Android 應用程式接受來自使用者設備上安裝的任何應用程式的 runtime Intent 設定額外參數。Flutter 3.50 在發佈版本中解決了這個漏洞,同時保持標準的深度連結完整:發佈版本會忽略來自外部 Intent 額外參數的 route、dart_entrypoint 和 cached_engine_id 值,並拒絕透過 Intent 額外參數提供或與預建發佈 APK ( --use-application-binary) 配對的 runtime 引擎標誌(例如 --dart-flags)。偵錯版本會記錄被忽略額外參數的警告,而針對預建二進位檔測試自訂引擎標誌現在需要設定檔模式或全新的建置。

了解更多:更嚴格的 Android Intent 應用程式進入點驗證 和 限制發佈模式下的 Android 引擎標誌

混合合成++

Hybrid Composition++ (HCPP) 是 Flutter 最新的平台視圖架構,用於嵌入原生 Android 視圖,例如地圖和網頁視圖,而不會像舊的合成模式那樣出現捲動撕裂或文字輸入故障。透過將合成直接交給 Android 作業系統,HCPP 提供了更流暢的捲動。Flutter 3.50 透過 AndroidViewSurface 上的無緩衝動態事件分派和 RenderAndroidView 中的佈局排序修復進一步改進了它。社群貢獻者 Amaan Ansari 還修復了 FlutterEngine 壽命比其 Activity 長時發生的崩潰問題。

HCPP 自 Flutter 3.44 穩定版以來就已可用,並且截至 3.49.0-0.1.pre,現在已在 beta 頻道上預設啟用。它將在未來的版本中成為穩定的預設值。請記住,HCPP 需要 Android 14 (API 34) 或更高版本以及在 Vulkan 上運行的 Impeller;在不符合這兩個要求的設備上,Flutter 會自動回退到您現有的平台視圖模式。在支援的 API 34+ Vulkan 設備上,執行 flutter config --enable-hcpp 並在偵錯模式下觀察 logcat,以便在平台視圖掛載時看到 Using HCPP platform view rendering strategy。

了解更多:使用平台視圖託管原生 Android 視圖

外掛程式內建 Kotlin

正如 Flutter 3.44 有什麼新功能 中介紹的,包含 Android 程式碼的 Flutter Plugin 必須直接遷移到 Android Gradle Plugin 的內建 Kotlin。仍然手動應用 Kotlin Gradle Plugin (KGP) 的 Plugin,即使是在 AGP 版本防護下,將來也會獲得較低的 pub.dev 分數,並且在 AGP 10 下將無法建置。請更新您的 Plugin 的 Gradle 配置,在 pubspec.yaml 中將您的最小 SDK 限制設定為 flutter: ">=3.44.0",並在您的 CHANGELOG.md 中註明此變更。

了解更多:Plugin 作者的內建 Kotlin 遷移指南

AGP 9 新 DSL 支援

在 Flutter 3.47 和 Flutter 3.50 之間,我們根據現代公共 Android Gradle Plugin 9 API 而不是傳統 BaseExtension 內部結構重寫了 Flutter Gradle Plugin。我們還將 flutter/packages 中的所有第一方 Plugin 遷移以支援其支援的 AGP 版本中的內建 Kotlin。在 Flutter 3.50 穩定版上,一旦您專案中的每個 Plugin 都支援內建 Kotlin,您就可以選擇將您的應用程式加入 AGP 9 的新 DSL。

了解更多:應用程式開發人員的內建 Kotlin 遷移指南

更新 Android 工具鏈預設值

由 Flutter 3.50 生成的新 Android 專案使用 Android Gradle Plugin (AGP) 9.3.1 和 Gradle 9.5.0,並已針對 Kotlin Gradle Plugin 2.4.20 和至少 Java 17 進行驗證。當您的專案使用 AGP 的內建 Kotlin 時,Flutter 不再列印 Kotlin 版本警告,因為 AGP 直接管理 Kotlin 相容性。此版本中暴露給您的 Gradle 建置檔案的預設 SDK 變數是 flutter.compileSdkVersion API 36、flutter.targetSdkVersion API 36 和 flutter.minSdkVersion API 24。

開發者體驗

Flutter 3.50 的日常工作流程更新帶來了官方 AI 代理外掛、可重複使用的套件技能,以及 Dart Analysis Server 中更快的冷重新命名重構。

AI 編碼外掛和套件技能

Flutter 3.50 擴展了對使用 AI 編碼助手進行建置的團隊的第一方工具。官方 Flutter 代理外掛程式捆綁了任務導向的代理技能、Dart 和 Flutter MCP 伺服器配置、專門的代理,以及持久的代理規則,包括一個主動的熱重新載入規則 (flutter-hot-reload),它會在 lib/ 下編輯後透過 MCP 伺服器觸發 hot_reload 或 hot_restart。

套件作者也可以直接在其 pub.dev 套件的頂層 skills/ 目錄中發布代理技能,以便應用程式開發人員可以使用 dart run skills@ get 從其套件相依性中發現和安裝技能。在發布之前,作者可以在 CI 中執行 package:skills_lint,以根據 Agent Skills 規範檢查 SKILL.md 的前置內容、目錄結構和命名約定。

了解更多:開始使用 AI 進行開發 和 套件技能

分析伺服器和 DevTools

在日常編輯器工作流程中,Dart 分析伺服器在填充搜尋索引時,會消除跨分析驅動程式的共享套件目錄發現的重複,從而加速多套件工作空間上的冷重新命名請求(在 16 個上下文的 DevTools 工作空間上快 57%,從 2.0s 降至 0.9s)。此外,Flutter DevTools 現在使用獨立的 material_ui 和 cupertino_ui 套件。

AI 和生態系統

在更廣泛的生態系統中,生產 AI 套件達到了重要的里程碑,同時有 100 萬個 Google Play 應用程式和一個開放的 Flutter RFC 流程。

Genkit Dart 1.0

Genkit Dart 達到了其穩定的 1.0 版本,用於在 Dart 和 Flutter 中建立全棧、多模型代理應用程式,具有端到端型別安全、串流流程、工具呼叫和 OpenTelemetry 追蹤。

Animated demo of the Cymbal Bistro Flutter app using Genkit Dart and A2UI to stream an interactive restaurant reservation card and invoke a booking tool.
Genkit Dart 1.0 在 Flutter 應用程式中串流互動式 A2UI 預訂流程和工具呼叫。

了解更多:Genkit Dart 文件

搭載 MediaPipe 的裝置端 AI

Google AI Edge 在 pub.dev 上推出的全新 MediaPipe 套件,為 Flutter 應用程式帶來了 20 項裝置端的視覺、音訊和文字任務,這些任務由 LiteRT 和 LiteRT-LM 提供支援。直接在裝置上運行這些模型可以避免網路延遲和雲端推斷成本。

了解更多:適用於 Flutter 的 MediaPipe Tasks 圖庫

一百萬個 Play Store 應用程式

Flutter 社群最近跨越了一個重要的里程碑:超過一百萬個 Flutter 應用程式在 Google Play 上發布。感謝每一位使用 Flutter 進行建置、發布和成長的開發人員和團隊。

套件生態系統亮點

在更廣泛的套件生態系統中,在我們的基準測試中,捲軸列表內重複使用內嵌 AdMob 橫幅廣告在 iOS 上帶來了 23% 的效能提升。我們還想強調兩個在此週期中發布的出色社群套件:Terradart 用於在純 Dart 中定義雲端基礎設施,以及 vyuh_diagram_flutter 用於在 Flutter 中以程式設計方式建立互動式節點圖。

了解更多:AdMob 橫幅廣告回收指南

客戶案例

世界各地的團隊繼續使用 Flutter 發佈雄心勃勃的生產應用程式。 Holafly 在三個月內將其行動應用程式統一到一個 Flutter 單一儲存庫中,為超過 200 萬月活躍使用者和 2500 萬 eSIM 提供服務。 Knowunity 將 Flutter 與 Go 和 Gemini 結合,支援 800 萬至 1000 萬月活躍學生。 Buzz 在 iOS 和 Android 上使用 Flutter 驅動一個開源工作區,讓人們和 AI 代理並肩協作。Google AI Edge 團隊使用 Flutter 建置了 Eloquent 和 Foresight 應用程式,將裝置端 AI 推斷帶給行動和桌面上的使用者。

Flutter 的商業價值

為了幫助工程主管評估 Flutter 未來的發展藍圖,我們的新 2026 白皮書分享了有關工程生產力、開發速度和商業投資回報的數據驅動見解。

了解更多:Flutter 的商業價值

宣布 Flutter RFCs

Flutter 正在採用公開的 Request for Comments (RFC) 流程來進行技術設計和決策。RFC 提供了一個協作、透明的空間,可以在早期分享想法、探索權衡、與子系統維護者保持一致,並在編寫生產程式碼之前建立架構共識。

了解更多:Flutter 設計文件 和 flutter/rfc

棄用與重大變更

Flutter 3.50 正式棄用了耦合的 package:flutter/material.dart 和 package:flutter/cupertino.dart 函式庫,以及它們的 flutter_localizations 委派。Android 發布版本也強制執行更嚴格的 Intent 驗證,並阻止偵錯引擎標誌,以及四個 Widget 行為更新。在 package:material_ui 中,DropdownButtonFormField 新增了一個明確的 enabled 屬性,因此您可以直接停用下拉式選單,而不是將 null 傳遞給 onChanged 回調。包含軟連字號的文字現在會在文字換行時自動顯示可見的連字號。右到左文字中的內聯 WidgetSpan 元素現在會以自然的閱讀順序顯示,而不是意外反轉。在行動瀏覽器上,當設定 viewport-fit=cover 時,SafeArea 現在會考慮設備缺口和主頁指示器,使 UI 不會被螢幕切口遮擋。

此版本也包含了兩項框架清理:

  • 先前已棄用的 ignoringSemantics 屬性已從 IgnorePointer、AbsorbPointer、SliverIgnorePointer 及其渲染物件中移除。
  • 當子項沒有基線時,RenderProxyBox 和其他使用 RenderProxyBoxMixin 的渲染物件上的 computeDryBaseline 現在會返回 null,而不是斷言失敗。

了解更多:Flutter 重大變更

新鮮出爐,準備升級

感謝社群中的每一位貢獻者,他們提交了議題、審查了設計並提交了 Pull Request,幫助塑造 Flutter 的下一個十年。Flutter 3.50 與 Dart 3.14 一起新鮮出爐。立即升級您的 SDK,以試用此版本中的所有功能:

1
flutter upgrade

若要探索此版本中包含的所有 Pull Request,請查看 Flutter 3.50 發行說明 和 重大變更。