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

網頁即時熱重載、原生保真度與更深入的整合
簡介
歡迎來到 Flutter 3.32!此版本包含許多旨在加速您的開發並提升您的應用程式的功能。準備好迎接網頁上的即時熱重載、令人驚嘆的 Cupertino 圓角矩形以實現原生保真度,以及與 Firebase 的強大新 AI 整合。Flutter 3.32 包含來自 156 位獨特貢獻者的 1024 次提交,其中包括 39 位首次貢獻者,這證明了我們社群的卓越工作。讓我們一起探索新功能!
網頁
網頁上的熱重載 (實驗性)
我們很高興地宣布,您現在可以在網頁上進行熱重載!網頁支援熱重載是 Flutter 追蹤器上得票數排名第二的議題。我們很高興能讓您有機會在您自己的專案中試用!我們需要您的協助,以確保這項令人興奮的新功能具備開發人員所需的一切。
如果您發現任何問題,請使用 Dart 的 網頁熱重載議題範本 提交錯誤。您可以在 網頁熱重載已知問題 GitHub 專案上找到已知問題列表。
現在是有趣的部分:如何使用此功能
我們新增了一個簡單的命令列旗標 --web-experimental-hot-reload
,您可以在任何呼叫 flutter run
的地方將其傳遞給 Flutter。
從 VS Code 執行
如果您在 VS Code 中使用除錯配置,您可以將此額外配置新增至您的 launch.json 檔案:
1 | "configurations": [ |
為了獲得最佳效果,我們建議在 VS Code 中啟用「Dart:儲存時 Flutter 熱重載」設定。也可以使用 Run/Debug 面板中的 ⚡ 圖示觸發熱重載。仍然可以使用 ⟳ 按鈕觸發熱重啟。
從命令列執行
如果您在命令列上使用「flutter run
」,您現在可以使用以下命令在網頁上運行熱重載:
1 | flutter run -d chrome --web-experimental-hot-reload |
啟用熱重載後,您可以在運行的終端機中按「r」來重載您的應用程式,或按「R」來熱重啟。
在 DartPad 中重載
熱重載現在也已在 DartPad 中提供,並新增了一個 Reload 按鈕。此功能僅在運行應用程式中檢測到 Flutter 時才可用。您可以使用 DartPad 提供的 範例應用程式 試用。
感謝您花時間協助我們讓網頁上的熱重載變得如此出色!
框架
我們繼續努力將邏輯從 Material 函式庫移至 Widget 函式庫。
此版本引入了一個新的 Expansible Widget,讓您可以更輕鬆地建立具有不同視覺主題的展開和收合 Widget。此新 Widget 作為 Material 風格 ExpansionTile 的基礎構成要素。
此版本中的另一項寶貴新增功能是由社群成員 davidhicks980 貢獻的 RawMenuAnchor。此 Widget 現在作為 Material 風格 MenuAnchor 的基礎構成要素,為建立具有各種視覺主題的選單鋪平了道路。此外,RawMenuAnchor
可以獨立作為無樣式選單使用,讓您可以完全控制其外觀。
像這樣的重構可以更好地支援核心 Widget 用於實作 Cupertino 和 Material 等設計語言(以及更多!)以實現更一致的介面和程式碼共用。
Cupertino
圓角矩形
我們很高興能向 Flutter 的形狀能力引入一項重要的全新功能:圓角超橢圓形。
這種形狀通常被稱為「蘋果圓角矩形」,是 iOS 設計語言的基石,以其比傳統圓角矩形更平滑、更連續的曲線而聞名。社群經常請求支援這種形狀。它的加入代表著我們努力在 Apple 平台上提供具有原生外觀和感覺的高保真 UI 又邁出了一步。
CupertinoAlertDialog 和 CupertinoActionSheet 都已更新為使用這種新的形狀!
您可以使用這些新的 API 將圓角超橢圓形新增到您的應用程式中:
- RoundedSuperellipseBorder 用於繪製或作為 Widget 形狀
- ClipRSuperellipse 用於裁剪。
- Canvas.drawRSuperellipse、Canvas.clipRSuperellipse 和 Path.addRSuperellipse 用於提供更直接控制的低階 API。
請注意,圓角超橢圓形仍在積極開發中。目前僅在 iOS 和 Android 上支援,否則行為會回歸標準圓角矩形。效能最佳化也在進行中。我們鼓勵您考慮這些因素來探索這項新功能,我們期待在未來的更新中增強其功能!
工作表
Cupertino 工作表也解決了幾個問題,包括修復工作表在 Android 上打開時如何設定系統 UI 主題。
工作表已調整,以修復導覽列的高度並確保內容底部不會被截斷。以下螢幕截圖顯示了此變更之前和之後的效果。
此版本中的其他修復包括解決工作表轉場與 PopupMenuButton 不相容的問題,以及改進工作表的圓角轉場,使其在更多裝置上看起來正確。之前,它在某些具有不同圓角半徑的螢幕上看起來不正確。
您現在也可以在 CupertinoSheetRoute 和 showCupertinoSheet 上使用新的 enableDrag 引數來停用 Cupertino 底部工作表的拖曳關閉行為。( #163923**)

導覽列
CupertinoSliverNavigationBar.search 在打開或關閉搜尋視圖時的動畫忠實度有所改進,以及搜尋欄位的前置和後置圖示正確對齊。
最後,CupertinoNavigationBars 或 CupertinoSliverNavigationBars 之間的路由轉場已更新,以符合最新的 iOS 轉場 (#164956)。
Material
此版本為 Material 函式庫帶來了一系列功能增強和錯誤修復,改善了功能和開發人員體驗。
功能增強包括:
- CarouselController 提供了一個更方便的 animateToIndex 方法,可透過固定或動態大小的項目以及 flexWeights 實現基於索引的平滑輪播導航。
- TabBar 現在具有 onHover 和 onFocusChange 回調,讓您可以更好地控制 Widget 在不同狀態下的外觀。
- SearchAnchor 和 SearchAnchor.bar 現在分別包含 viewOnOpen 和 onOpen 回調,以便更好地觀察和處理開啟/關閉事件。
- CalendarDatePicker 現在接受一個 calendarDelegate 以實現自訂日曆邏輯的整合,超越公曆系統。範例展示了一個假設的日曆系統,其中偶數月份有 21 天,奇數月份有 28 天,並且每個月份都從星期一開始,展示了此 delegate 的靈活性。
其他次要增強包括為 showDialog、showAdaptiveDialog 和 DialogRoute 新增 animationStyle,以自訂對話框開啟和關閉時的動畫;Divider 現在接受 borderRadius,以允許自訂分隔線的邊框,特別是在分隔線很粗時。
除了新功能外,此版本還解決了 Material 函式庫中與 DropdownMenu 和 Sliders 相關的幾個錯誤:
- DropdownMenu Widget 現在允許其選單寬度小於文字欄位。範例已更新,以解決之前的 RenderFlex 溢位錯誤。DropdownMenu 的預設寬度現在會尊重文字欄位中的文字標籤寬度。
- 當滑鼠懸停在 RangeSlider 拇指上時,只會出現懸停拇指的覆疊。之前,兩個覆疊都會不正確地顯示。當軌道顏色透明時,Slider 拇指現在可以到達軌道的兩端,克服了之前無法到達的限制。
輔助使用
最佳化 語義樹編譯
此功能將語義編譯時間減少了約 80%。在 Flutter 網頁應用程式中,這意味著啟用語義後,框架時間減少了 30%。
引入更精細的語義角色
一個新的 SemanticsRole API 已整合到 Semantics Widget 及其相關組件中,為開發人員提供了更精確的控制,以決定 UI 元素如何由輔助技術解釋。此增強功能允許透過簡單地將整個 Widget 子樹包裝在配置有所需角色的 Semantics Widget 中,為其指派特定的角色。
官方 API 文件 中詳細列出了可用角色。目前,此進階語義角色功能僅適用於基於網頁的應用程式,對其他平台的支援將在未來版本中提供。
欲了解更多資訊,請參閱透過語義角色增強輔助使用。
其他輔助使用改進
- 改善 Widget 和螢幕閱讀器的使用者體驗: 改善了各種 Widget 的輔助使用支援和使用者體驗,包括文字欄位、焦點處理、選單、滑塊和下拉式選單。現在,當使用者與這些元素互動時,螢幕閱讀器會提供更詳細的回饋。
- 透過語義改善網頁焦點導航: 在啟用語義時,優化了網頁焦點行為,顯著減少了 Widget 之間突兀的焦點跳轉,以提供更直觀的導航體驗。
- 改善 Android TalkBack 對連結的辨識: Android TalkBack 現在可以正確識別和宣告使用 Semantics.linkUrl 或 url_launcher 套件中的 Link Widget 定義的連結。
- Flutter 網頁應用程式支援 Windows 高對比模式: 引入了對 Windows「強制色彩」模式(通常用於高對比情況)的支援。開發人員現在可以在 ThemeData 中設定 useSystemColors 布林值,以自動將系統色彩應用於 Flutter 主題,從而增強依賴這些設定的使用者的可見性。
- 精進 iOS 語音控制體驗: 改善了 iOS 語音控制的使用者體驗,確保非操作性 Widget 不再顯示不必要的標籤,為使用者帶來更清晰、更專注的互動。
文字輸入
此版本對文字輸入進行了多項改進:
- iOS 上啟動了系統文字選取上下文選單,這在下面的 iOS 部分有說明。
- Autocomplete Widget 選項的布局已移植到 OverlayPortal,改善了效能並修復了布局錯誤。
- 現在可以在文字欄位中自訂 onTapUpOutside 行為 (#162575)。
- 開發人員現在可以為 FormField 產生任何想要的 Widget 作為錯誤訊息,而不僅僅是錯誤文字 (#162255)。
- Flutter 中的可選取文字變得錯誤較少 (#162228),並且在網頁上的效能更好 (#161682)。
多視窗支援進度
Canonical 的貢獻者在允許桌面應用程式擁有多個視窗方面取得了顯著進展!
Canonical 修復了應用程式有多個視窗時損壞的幾個功能:
Canonical 還增加了一個功能,讓 Dart 程式碼 FFI 可以直接與 Flutter 引擎通信 (#163430)。這為 Flutter 未來的視窗 API 奠定了基礎。
最後,Canonical 在 Linux 上引入了一個渲染線程 (#161879)。這提高了框架吞吐量,即使您有多個視窗,也能確保 Flutter Linux 保持流暢。
桌面執行緒合併
Canonical 還更新了 Windows 和 macOS,允許應用程式合併 UI 和平台執行緒 (#162883,#162935)。
合併的執行緒讓您可以使用 Dart FFI 與必須在平台執行緒上呼叫的原生 API 進行互操作。例如,如果您在 Windows 上啟用合併的執行緒,您可以使用 Dart FFI 使用 win32 API 調整應用程式視窗的大小!
在 Windows 上,您可以透過在 windows/runner/main.cpp
檔案中的 wWinMain
方法內新增以下內容來開啟合併的執行緒:
1 | project.set_ui_thread_policy(UIThreadPolicy::RunOnPlatformThread) |
在 macOS 上,您可以透過在您的 macos/Runner/Info.plist
檔案中的 <dict>
元素內新增以下內容來開啟合併的執行緒:
1 | <key>FLTEnableMergedPlatformUIThread</key> |
在未來版本中,我們將在 Windows 和 macOS 上預設開啟合併的執行緒。請試用此功能,如果您遇到任何錯誤,請 建立議題!
iOS
我們增強了 Flutter 應用程式在 iOS 上的貼上體驗!對於沒有自訂操作的基本文字欄位,使用者從其他應用程式貼上內容時將不再看到確認對話方塊。這現在已在所有 Flutter iOS 應用程式上預設啟用。請注意,如果您的應用程式使用自訂操作(例如,上下文選單中的「傳送電子郵件」),此功能 尚未支援。
Android
Gradle 工具的 Kotlin 語言重寫
Flutter 的 Gradle Plugin 已從 Groovy 轉換為 Kotlin。這種向 Kotlin 的轉換使程式碼庫更容易貢獻,並且也促進了對 Plugin 引入單元測試。新增的測試以及從動態類型和執行的語言轉換為靜態類型語言,應會為 Flutter 開發人員帶來更穩定可靠的建構過程。我們不預期重寫會導致任何行為變化,因此如果您注意到 Android 建構行為與您預期的不同,請 提交問題。
Scribe / Stylus 支援
您現在可以在 Android 上使用觸控筆在文字欄位中書寫,就像 Apple Pencil 手寫輸入已在 Flutter iOS 應用程式上工作一樣。使用者可以直接在任何 Flutter 文字輸入欄位上開始書寫,手寫內容將以文字形式顯示在欄位中。並非所有手勢都已支援,但我們正在 努力彌補這些差距。此功能在 Android 14 及更高版本上支援,並且可以在需要時使用 TextField.stylusHandwritingEnabled 或 CupertinoTextField.stylusHandwritingEnabled 參數停用。
引擎
Android 上的 Impeller
從 3.29.3 版本開始,在執行 Android API 級別 28 (Android 9) 及更舊版本的設備上,Flutter 應用程式將使用傳統的 Skia 渲染器。此變更提高了 Flutter 在較舊 Android 設備上的穩定性。Impeller 繼續成為在執行 API 級別 29 (Android 10) 及更新版本的設備上的預設渲染器。
隨著我們從使用不同裝置的使用者那裡獲得更多回饋,我們調整了哪些裝置使用 Impeller 的 Vulkan 與 OpenGLES 後端。特別是,在此版本中,以下裝置將使用 OpenGLES 而非 Vulkan:Android 模擬器、API 版本低於 31 的 MediaTek 裝置、早於 CXT 的 PowerVR 裝置,以及不支援 Vulkan 1.3 的較舊版本 Samsung XClipse GPU。
如同先前版本,您可以按照 這些指示 選擇不使用 Impeller。由於我們對 Impeller 穩定性和效能越來越有信心,在即將推出的穩定版本中,將會移除在較新 Android 裝置上選擇不使用 Impeller 的功能。
最後,Flutter 3.27 有許多與 Impeller 在支援 Vulkan 的裝置上渲染相關的渲染錯誤和崩潰,這些問題在 3.29 及更高版本中已修復。我們不打算將這些變更熱修復到 3.27 中,我們強烈建議更新到 3.29 或更高版本。如果您的應用程式無法這樣做,我們建議在 Android 裝置上選擇不使用 Impeller。
其他 Impeller 更新
此版本改進了 Impeller 的文字渲染。值得注意的是,文字動畫更流暢,抖動更少,這歸功於 Impeller 字體地圖中更高解析度的字形,以及修復浮點計算中的四捨五入錯誤。有關更多詳細資訊,請參閱 flutter#149652。
此版本還包括各種其他準確度和效能改進,包括:
DevTools 與 IDE
[新功能] Flutter 屬性編輯器
透過新的屬性編輯器工具,輕鬆編輯 Widget 屬性並閱讀文件,該工具可從 Flutter 屬性編輯器側邊欄面板 (VS Code) 或工具視窗 (Android Studio / IntelliJ) 存取。

設備上 Widget 檢查器中的變更
設備上的 Widget 檢查器新增了一個按鈕,可用於在選取 Widget 模式下開啟或關閉 Widget 選取行為。這允許您在 Widget 選取模式下與應用程式互動 (例如,導航到新頁面) 並選取 Widget。
DevTools 改進
DevTools 進行了額外改進,包括網路螢幕的新離線支援、與熱重啟相關問題的錯誤修復、文字焦點、Deep Links 工具以及 CPU 分析工具和記憶體螢幕的資料改進。此版本還包括 DevTools 的多項效能和記憶體改進,這將導致更快的資料載入時間和更少的記憶體相關崩潰。
這些只是此版本中的部分亮點。要了解 Flutter 3.32 中包含的所有更新,請查看 DevTools 的發行說明:2.44.0、2.45.0 和 2.46.0。
分析器改進
我們持續改進 Dart 分析器,進而改善開發者體驗。這包括加入「doc imports」,這是一種新的基於註解的語法,允許在文件註解中引用外部元素,而無需實際匯入它們。請參閱 dart.dev 上的詳細資訊。我們也進行了多項快速修復、協助和重新命名改進。
Android Studio 中的 Gemini 現在能流利地說 Flutter 和 Dart
Android Studio 中的 Gemini 現在為 Dart 和 Flutter 開發提供一流的支援!這意味著您可以直接在您喜歡的 IDE 中利用 Gemini 的強大功能,比以往更快、更輕鬆地建立精美、高效能的 Flutter 應用程式。
閱讀這篇部落格文章 以了解更多資訊。

Dart 和 Flutter 對模型上下文協議 ( MCP ) 的支援即將到來
對模型上下文協議 ( MCP ) 和最近發布的 Dart MCP SDK 的支援正在積極進行中。一個新的 Dart 工具 MCP 伺服器 也在開發中,它將向 MCP 用戶端 (例如 IDE) 公開 Dart 和 Flutter 的靜態、執行時和生態系統工具。
這將為 Dart 和 Flutter 開發人員帶來以下好處:
- 更準確、更相關的程式碼生成。
- 複雜的任務,例如修復布局問題、管理依賴項,甚至解決執行時錯誤,都將變得可行,因為 MCP 協議會公開來自實際 Dart 和 Flutter 工具的語義資訊。
請持續關注!
使用 AI 建立
隆重推出 Firebase AI Logic
您可能聽說過,甚至使用過 Firebase 中的 Vertex AI,這是我們用於直接將 Gemini API 驅動功能整合到您的 Flutter 應用程式中的用戶端 SDK。
許多人要求使用 Gemini Developer API,而不是 Vertex AI,以利用慷慨的免費方案並開始免費新增生成式 AI。我們聽到了!從今天起,我們將 Firebase 中的 Vertex AI 演變為 Firebase AI Logic,它只需一個 Flutter SDK 即可存取兩個 Gemini API 提供者。它讓您可以直接從 Flutter 應用程式中使用 Gemini 和 Imagen 模型,而無需伺服器端 SDK。
請查看 firebase_ai 套件以了解新功能。如果您已經使用 firebase_vertexai 套件,它目前將繼續按原樣工作,但我們鼓勵您遷移到新的套件。
透過 AI 監控儀表板獲得可行的洞見
Firebase 控制台中的全新 AI 監控儀表板提供您 Gemini API 使用情況的詳細且可行的洞見。這包括全面了解消耗模式、效能指標和潛在問題。這能讓您做出資料驅動的決策,並確保您以最有效的方式使用 Gemini API。AI 監控還有助於您偵錯 Gemini API 的使用情況,並識別和解決任何非預期的行為。
重大變更與棄用
Android 輔助使用公告
在 Android 上,語義公告事件 從 API 36 開始已棄用。相反,請透過配置 SemanticProperties.liveRegion 來使用「禮貌」的隱式公告。目前,在公告不應獲得焦點的文字時存在一個已知限制。請參閱議題 #165857,以了解此限制的詳細資訊以及解決此問題的計畫。若要查看其他解決方案,請查看 SemanticService.announce 的文件。
停用 6 個套件的支援
正如我們在 Flutter 3.29 版本部落格文章 中計畫和分享的,我們已停用以下套件的支援:
- flutter_markdown;參見 flutter_markdown 規劃停用 #162966
- ios_platform_images;參見 ios_platform_images 規劃停用 #162961
- css_colors;參見 css_colors 規劃停用 #162962
- palette_generator;參見 palette_generator 規劃停用 #162963
- flutter_image;參見 flutter_image 停用 #162964
- flutter_adaptive_scaffold;參見 flutter_adaptive_scaffold 規劃停用 #162965
我們鼓勵社群成員參考每個議題中的討論以尋找替代方案。
iOS 和 macOS 最低版本
Flutter 將在下一個穩定版本中棄用對 iOS 12 和 macOS 10.14 (Mojave) 的支援,並將目標設定為最低支援 iOS 13 和 macOS 10.15 (Catalina)。這意味著使用未來 Flutter 版本建構的應用程式將無法在 iOS 12 或 macOS 10.14 上執行。
其他重大變更
此版本中的其他重大變更與棄用包括:
- Material 中的 ExpansionTileController 已棄用,改用 Widget 層中新的可重複使用 ExpansibleController。
- SelectionChangedCause.scribble (已棄用) 已重新命名為 SelectionChangedCause.stylusHandwriting,因為 Apple 的 Scribble 功能現已與 Android 的 Scribe 統一。
- 作為我們持續努力標準化 Material 主題的一部分,ThemeData.indicatorColor 已棄用,改用 TabBarThemeData.indicatorColor,而 cardTheme、dialogTheme 和 tabBarTheme 的組件主題類型則需要遷移到 CardThemeData、DialogThemeData 和 TabBarThemeData。
- 某些行為中的 SpringDescription 公式已更正。此變更解決了某些參數組合的行為與預期現實世界物理不符,並在臨界阻尼點附近表現出不連續性的問題。此變更會影響阻尼比小於 1 且品質值非 1 的欠阻尼彈簧。在此變更之前建立的此類彈簧在升級後可能會表現出不同的彈跳行為。要恢復之前的動畫行為,請根據 Spring Description Underdamped 重大變更指南 更新您的彈簧參數,您還可以在其中找到 一個工具,用於計算參數調整。
若要查看此版本中所有棄用或重大變更的遷移指南,請參閱 重大變更 頁面。更新後執行 dart fix
會自動為您遷移部分變更。
結論
Flutter 3.32 標誌著又一個向前邁進的步伐,這得益於我們社群令人難以置信的奉獻精神。我們很高興能為您帶來網頁熱重載等功能和持續的平台改進。您的貢獻是無價的,我們迫不及待想看看您會建立什麼。欲獲取全面概覽,請查看詳細的發行說明和變更日誌。要開始使用,只需執行 flutter upgrade
並深入了解最新版本!
Flutter 3.32 的新功能最初發佈在 Flutter 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。