【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】
賦能社群
今天,我們很高興地宣布發布 Flutter 3.41,這標誌著我們共同旅程中的一個轉型里程碑!對於開發者來說,這是一個多麼令人興奮的時代;此版本代表了我們致力於賦能社群塑造 Flutter 方向的承諾。Flutter 3.41 包含來自 145 位獨特貢獻者的 868 次提交,提供了額外的透明度和模組化,以進一步改善對 Flutter 的貢獻體驗。
我們正在引入公開發布窗口,讓您更容易了解您貢獻的變更何時會發布到穩定版本。我們還將繼續解耦我們的設計函式庫,這從長遠來看將幫助我們更快地發展設計系統,同時也讓您可以控制在應用程式中採用哪些設計變更。無論您是透過新的片段著色器改進來突破 GPU 的極限,還是使用內容大小的視圖將 Flutter 無縫嵌入到現有的原生應用程式中,此版本都能確保您擁有自信和快速構建的工具。
有太多值得探索的內容,讓我們深入了解…
結構透明度和模組化
公開發布窗口
可預測性是安全地實現複雜功能的關鍵。我們正在引入公開發布窗口,為整個社群提供規劃所需的能見度。透過公開明確地指出分支截止日期和發布目標,我們使整個社群能夠清楚地了解他們的變更何時會發布到未來的穩定版本。
那麼什麼是分支截止日期?這個日期是拉取請求提交到預設分支(Dart 為 main,Flutter 為 master)的截止日期,以保證包含在下一個穩定版本中。如果您的 PR 在截止日期之前合併,它將在下一個穩定版本中發布。如果它在截止日期之後合併,它將等待下一個週期。
2026 年,我們計劃發布四個穩定版本(包括此版本),日期如下:
- Flutter 3.41 — 2 月 | 1 月 6 日分支
- Flutter 3.44 — 5 月 | 4 月 7 日分支
- Flutter 3.47 — 8 月 | 7 月 7 日分支
- Flutter 3.50 — 11 月 | 10 月 6 日分支
解耦以實現更精簡的核心
我們正在繼續將 Material 和 Cupertino 函式庫遷移到獨立套件的專案。這種模組化方法有幾個優點:
- 更快的發布週期: 我們不再需要等待每季的 SDK 發布才能發布設計更新。我們可以在新的 Material 或 Cupertino 功能和錯誤修復準備就緒時立即發布。
- 獨立升級: 如果您由於專案限制而使用舊的 SDK 版本,您仍然可以升級您的設計套件以獲得最新的外觀和感覺。
- 自適應設計: 版本化的套件使我們能夠在 iOS 或 Android 引入 drastic 設計轉變(例如「液態玻璃」或「Material 3 Expressive」)時更快地做出反應,確保您的應用程式永不過時。
請關注 GitHub 議題 以追蹤進度。
擁抱生態系統標準
賦能社群的一部分是確保 Flutter 與我們已經依賴的工具良好協作。
Swift Package Manager 和 UIScene
從 CocoaPods 到 Swift Package Manager 的過渡仍在繼續。我們強烈鼓勵 Plugin 作者 採用 Swift Package Manager,因為它現在是 Apple 生態系統的標準。此外,為確保與未來 iOS 版本的相容性,Flutter 現在 預設完全支援 UIScene 生命周期。此更新對於滿足 Apple 對即將推出的 iOS 版本的需求至關重要。為了簡化從已棄用的 AppDelegate 生命周期邏輯的遷移,請查看我們的 遷移指南。
Android Grade Plugin (AGP) 9 和 Kotlin DSL
我們持續與現代 Android 標準保持一致。隨著 Android Gradle Plugin (AGP) 9 的發布,我們正在努力支援新的嚴格要求並提供如何應對這些要求的指導。
警告: 請勿 將您的 Flutter Android 應用程式更新到 AGP 9,因為 將 Plugin 遷移到 AGP 9 和在 AGP 9 上使用 Plugin 的 Flutter 應用程式 尚未支援 (#181383)。此支援已暫停,因為 Flutter 團隊正在審核遷移以確保與舊版本 AGP 的向後相容性。此 遷移文件 將隨著指導變更而更新。
感謝社群成員 Byoungchan Lee (bc-lee@) 的貢獻,新的 Plugin 專案現在預設使用 Gradle 的 Kotlin DSL。
平台特定資產
由於 Alex Frei (hm21@) 的努力,優化現在變得更容易。您現在可以在 pubspec.yaml 中指定資產應捆綁哪些平台。這允許進行優化,例如,從行動建置中排除大型桌面資產,從而顯著減小應用程式大小。
1 | flutter: |
傾聽社群的聲音
Google 的 Flutter 團隊持續優先考慮對您最重要的事項。
入門體驗
多年來,社群一直指出,雖然 Flutter 令人愉悅且高效,但很難知道從何開始學習。
我們最近推出了完全重新構想的 Dart 和 Flutter 入門體驗。
這是一個新的學習途徑,旨在引導您了解使用 Flutter 和 Dart 構建應用程式的基礎知識。讓我們快速瀏覽一些變更:
- 我們引入了一個新的「快速安裝」指南,該指南利用網頁上的熱重載,使學習者能夠快速體驗 Flutter 的全部功能,而無需首先設定特定於平台的環境。這是一個包含書面教學、低風險測驗以及 Google Flutter 團隊中一些熟悉的面孔的八個新影片的途徑。
- 學習者將在完成學習路徑後從頭開始構建 4 個應用程式。
在我們網站上重新設計的 學習 部分中嘗試新的入門體驗,該部分由 Jaspr 提供支援。
片段著色器改進
在 2025 年第四季度,我們調查了使用 FragmentShader API 的開發人員,並簡單地問道:是什麼阻礙了您的工作? 您告訴我們,您在使用 API 時需要改進人體工學,同時在定義著色器時擁有更大的靈活性。為此,我們進行了以下變更:
- 在 3.41 中,我們加入了同步圖片解碼。以前,為著色器建立紋理可能會引入一幀延遲。使用
decodeImageFromPixelsSync,您現在可以在同一幀中生成紋理並將其用作取樣器。 - 我們還加入了對高位元速率紋理(高達 128 位元浮點)的支援,解鎖了使用高解析度查找表 (LUT) 進行 GPU 加速照片濾鏡和 SDF 的能力。
1 | void attachTexture(ui.FragmentShader shader) { |
Widget 預覽(實驗性)
根據您的早期回饋,我們正在快速疊代 Widget 預覽。在此版本中,Widget 預覽得到了以下改進:
- Flutter Inspector 支援: Widget 預覽環境現在可以存取嵌入式 Flutter Inspector 實例,使檢查佈局和預覽 Widget 的狀態變得容易。重要提示: 預設情況下,可能需要配置額外的套件目錄才能看到專案中的 Widget。為此,請點擊齒輪圖標打開 Flutter Inspector 設定,並添加一個指向您專案的新套件目錄。
- 支援具有
dart:ffi依賴項的應用程式: 以前,包含具有dart:ffi函式庫傳遞依賴項的 Widget 預覽會導致編譯錯誤並阻止預覽環境更新。發生這種情況是因為dart:ffi不支援 Web 平台 (flutter/flutter#166431)。Widget 預覽器現在可以處理對平台特定函式庫(包括dart:ffi和dart:io)具有依賴項的預覽。重要提示:在 Widget 預覽器中不支援調用這些函式庫的 API,並且將導致針對調用這些平台特定 API 的預覽顯示錯誤。有關如何撰寫與原生和 Web 平台都相容的程式碼的範例,請參閱 Dart 條件導入文件。
框架保真度和優化
我們持續專注於平台保真度和開發人員效率,以改進當前的體驗。
iOS 優化
在 Flutter 3.41 中,我們透過新的「有界模糊」風格對視覺效果進行了改進。以前,使用 BackdropFilter 的半透明 Widget 可能會出現邊緣顏色滲出的問題。由於 Impeller 渲染引擎的改進,我們已經消除了這種假影。
我們還透過 showDragHandle 屬性為 CupertinoSheet 加入了原生風格的拖曳處理支援。
添加到應用程式
現在將 Flutter 視圖添加到現有的 Android 和 iOS 應用程式中變得更容易了!嵌入在現有原生應用程式中的 Flutter 視圖現在可以根據其內容自動調整大小。以前,Flutter 視圖需要由其原生父級提供固定大小。這使得某些情況變得困難,例如將 Flutter 視圖添加到原生可捲動視圖中。
要使用此功能,您的根 Widget 必須支援無界約束。避免在樹的頂部使用需要預定義大小的 Widget(例如 ListView 或 LayoutBuilder),因為它們將與動態大小調整邏輯衝突。
要在 iOS 上啟用此行為,請 將 FlutterViewController.isAutoResizable 設定為 true。對於 Android,請在您的 Android Manifest 中啟用內容大小調整,並 將您的 FlutterView 的寬度或高度設定為 content_wrap。
導航和捲軸
我們努力透過以下變更來消除核心互動模型中的粗糙邊緣:
- 我們引入了
Navigator.popUntilWithResult,允許您在單一呼叫中彈出多個螢幕並將值傳回目的地路由,大大簡化了多步驟流程中的狀態管理。 - 我們使用從 Android 12 移植的基於模擬的方法重新實現了
StretchingOverscrollIndicator。這確保了更自然流暢的過度捲軸效果,可正確回應高速滑動。
- 我們修復了
NestedScrollView和SliverMainAxisGroup中固定標題的問題,確保標題正確覆蓋後續的 sliver。
無障礙
幫助您建立無障礙體驗,讓使用者在任何螢幕上都能使用,是我們使命的核心。在此更新中,我們加入了以下內容:
CircularProgressIndicator和LinearProgressIndicator的原生無障礙支援,允許輔助技術宣布進度更新。- Flutter 現在尊重網頁使用者的文字間距覆蓋,以改善閱讀體驗。
- 我們在
flutter_test中引入了新的匹配器,例如isSemantics和accessibilityAnnouncement,以使驗證無障礙變得更容易。
Material 和動畫
我們引入了新的原始類型和屬性,以擴展對動畫和佈局的控制。感謝社群成員 Bernardo Ferrari (bernaferrari@) 的努力,RepeatingAnimationBuilder 引入了一種宣告式的方式來創建連續動畫,例如載入指示器、脈衝按鈕或閃爍的佔位符效果。
例如,您可以這樣製作一個方塊來回滑動:
1 | RepeatingAnimationBuilder<Offset>( |
我們還更新了 CarouselView,增加了 .builder 構造函數,讓建立動態內容的輪播變得更容易。DropdownMenuFormField 現在支援自訂的 errorBuilder,並且 RawAutoComplete 現在包含 OptionsViewOpenDirection.mostSpace 選項,可以根據可用的螢幕空間智能地定位選項。
社群主導的演進
Flutter 開源夥伴關係最強大的範例之一是我們與 Canonical 的長期關係。他們的團隊持續推動 Flutter 桌面的發展藍圖,提供造福整個生態系統的關鍵功能。
感謝 Canonical 的工程領導,我們正在彌補複雜桌面 UI 需求方面的差距。此版本引入了用於創建彈出視窗和工具提示視窗的實驗性 API,以及對 Linux、macOS 和 Windows 上對話框視窗的跨平台支援。最後,增加了新的 API,讓您可以測試多視窗應用程式。如果您想先睹為快這些即將推出的視窗 API,請查看 Flutter 的 multiple_windows 範例應用程式!
Flutter Linux 現在也預設啟用合併執行緒,簡化了執行緒模型並提高了效能,同時也致力於提高 Windows 的穩定性。我們打算在未來的版本中移除合併執行緒選擇退出。如果您對合併執行緒有任何問題,請 告知我們。
DevTools
Devtools 在效能和穩定性方面都有所改進:
- Flutter 的 DevTools 使用 dart2wasm 編譯,從而提高了效能。您仍然可以選擇退出並恢復到 dart2js 編譯的 DevTools,方法是使用設定對話框。
- 與 Dart Tooling Daemon (DTD) 的斷開連線現在會自動重試,以改善機器休眠後恢復時的體驗。
這些只是此版本中的幾個亮點。若要了解 Flutter 3.41 中包含的所有更新,請查看 DevTools 2.52.0、2.53.0 和 2.54.0 的發行說明。
下一步:flutter upgrade
Flutter 3.41 是朝著改善我們的開源貢獻體驗邁出的一步,同時也改善了 Flutter 的基礎功能,以增強您的開發體驗,無論您是將插件遷移到 Swift Package Manager,為特定平台優化資產,還是使用新的 Shader API 推動像素。我們感謝我們共同建立的精彩社群。
有關所有變更的完整列表,請務必查看詳細的 重大變更 和 發行說明。要試用 Flutter 3.41 中的新功能,只需運行 flutter upgrade!
Flutter 3.41 的新功能 最初發佈在 Flutter 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。