【文章內容使用 Gemini 1.5 Pro 自動產生】
宣布 Flutter 2.10:穩定版 Windows、效能提升、Material 3 更新等等!
我簡直不敢相信又到了 Flutter 穩定版本發佈的時候!大家好,歡迎來到 Flutter 2.10。距離我們上次發佈版本還不到兩個月,但即使在那段時間裡,我們也收到了來自全球 155 位貢獻者的 1,843 個已解決的議題和 1,525 個已合併的 PR。感謝大家辛勤付出,特別是在 2021 年的假期期間。
這個版本有許多令人興奮的更新,包括 Flutter 對 Windows 支援的重大進展、幾個重要的效能提升、框架中對圖示和顏色的新支援,以及一些工具的改進。此外,我們還有一些關於移除 dev 頻道的更新、對舊版 iOS 的支援減少,以及一些重大變化的簡短清單。讓我們開始吧!
Windows 上的生產應用程式準備就緒
首先,Flutter 2.10 版本帶來了 Windows 支援的穩定版本。您不再需要切換旗標來獲得在 Flutter 的 stable 頻道上生成 Windows 應用程式的功能 - 現在這個功能預設提供!
當然,我們做的不僅僅是切換旗標。這個版本包括對文字處理、鍵盤處理和鍵盤快捷鍵的廣泛改進,以及與 Windows 的直接整合,支援命令列參數、全球化文字輸入和無障礙功能。
關於 Windows 穩定版發佈的更多資訊,請參閱 宣布 Flutter for Windows 部落格文章,這篇文章描述了 Flutter 在 Windows 上的架構,它允許深度整合,並讓您了解有多少 Flutter 套件和插件已經支援 Windows。您也可以看到我們的工具和應用程式合作夥伴使用 Flutter 在 Windows 上做的一些例子!
效能提升
此版本包含 Flutter 的初始支援,即由 Flutter 社群成員 knopp 提供的 髒污區域管理。他為 iOS/Metal 上單個髒污區域啟用了局部重新繪製。此變更將幾個基準測試的第 90 個和第 99 個百分位數的柵格化時間減少了數量級,並且將這些基準測試上的 GPU 使用率從 90% 以上降至 10% 以下。
我們預計在未來的版本中將局部重新繪製的好處帶到 其他平台。
在 Flutter 2.8 版本中,我們 推出了我們自己的內部圖片記錄格式。現在在 Flutter 2.10 中,我們已經開始利用它建立優化。例如,**透明度層的常見用例現在 實現得更加高效**。即使在最壞的情況下,基準測試中的畫面柵格化時間也降至之前值的 1/3 以下。
我們預計這種優化將在我們繼續開發圖片記錄格式時擴展到更多案例。
在 Profile 和 Release 模式下,Dart 程式碼會提前編譯成原生機器碼。此程式碼效率高且體積小的關鍵是全程式碼類型流分析,它可以解鎖許多編譯器優化和積極的樹狀搖動。然而,由於類型流分析必須涵蓋整個程式碼,因此它可能有點昂貴。這個版本包含 類型流分析的更快速實作。基準測試中 Flutter 應用程式的整體構建時間下降了約 10%。
與往常一樣,效能提升、減少記憶體使用和降低延遲是 Flutter 團隊的優先順序。期待在未來的版本中看到更多改進。
iOS 更新
除了效能提升,我們還新增了一些平台特定的功能和增強功能。一個新的增強功能是來自 luckysmg 的 iOS 上更平滑的鍵盤動畫,它會自動提供給您的應用程式,您無需做任何事情。
我們還透過修復一些 邊緣 案例 的 崩潰 來提高 iOS 相機插件的穩定性。
最後,64 位 iOS 架構獲得了一個新的功能來減少記憶體使用:壓縮 **指標****。
一個 64 位架構將指標表示為一個 8 位元組的資料結構。當您有很多物件時,指標本身佔用的空間會增加應用程式的整體記憶體使用量,特別是如果您有更大、更複雜的應用程式,這些應用程式具有更多 GC 抖動。但是,您的 iOS 應用程式不太可能擁有足夠的物件來需要大量使用 32 位地址空間(20 億個物件),更不用說 64 位地址空間的巨大空間(90 億億個物件)。
壓縮指標在 Dart 2.15 中提供,在此版本中,我們使用它們來減少 64 位 iOS 應用程式的記憶體使用量。您可以 查看 Dart 2.15 部落格文章以獲取詳細資訊。
當您閱讀 Dart 部落格文章時,別忘了 查看 Dart 2.16 宣布,其中包含關於使用套件平台標記支援 Flutter for Windows 以及在 pub.dev 上推出新的搜尋體驗的更新。
Android 更新
這個版本還包含許多針對 Android 的改進。預設情況下,當您建立新的應用程式時,Flutter 預設支援最新版本的 Android,版本 12(API 級別 31)。此外,在此版本中,**我們已 **自動啟用 multidex 支援**。如果您的應用程式支援 Android SDK 版本低於 21,並且超過 64K 方法限制,只需將 --multidex
旗標傳遞給 flutter build appbundle
或 flutter build apk
,您的應用程式就會支援 multidex。
最後但並非最不重要的一點是,我們聽取了您的反饋意見,認為 Gradle 錯誤訊息會令人望而生畏。因此,Flutter 工具現在會建議如何解決常見問題的步驟 。例如,如果您為應用程式加入一個 Plugin,它需要您提高最低支援的 Android SDK 版本,您現在會在日誌中看到一個「Flutter Fix」建議。
我們將繼續為常見的錯誤訊息新增更多建議,並且樂於收到您對其他錯誤訊息的回饋,這些錯誤訊息也可能需要這種處理方法。
Web 更新
這個版本還包含一些針對 Web 的改進。例如,在之前的版本中,當捲軸到 Web 上多行 TextField 的邊緣時,它不會正確捲軸。這個版本引入了 文字選取的邊緣捲軸:當選取範圍移動到文字欄位之外時,欄位會捲軸以顯示捲軸範圍。這種新的行為適用於 Web 和桌面應用程式。
此外,這個版本的 Flutter 包含了另一個針對 Web 的顯著改進。我們一直在尋找方法來減少 Flutter 對 Web 的對映開銷。在之前的版本中,每次我們想要將原生 HTML Widget 加入到 Flutter 應用程式時,我們都需要一個覆蓋層作為我們針對 Web 的平台視圖支援的一部分。這些覆蓋層中的每一個都允許自訂繪製,但會造成一定程度的開銷。如果您的應用程式中有大量的原生 HTML Widget,例如連結,這些開銷會加起來。在此版本中,我們為 Web 建立了一個新的「非繪製平台視圖」,基本上消除了這種開銷。我們已經 在 連結 Widget 中利用了這種優化,這意味著如果您的 Flutter Web 應用程式中有許多連結,它們將不再會造成任何顯著的開銷。我們將隨著時間推移將這種優化應用於其他 Widget。
Material 3
此版本是過渡到 Material 3 的開始,其中包括 從單個種子顏色生成整個顏色配置 的功能。
使用任何顏色,您可以構造一個新的 ColorScheme 類型的實例:
ThemeData
工廠建構函式中還有一個新的 colorSchemeSeed
參數,允許您生成主題的顏色配置:
此外,此版本還包含 ThemeData.useMaterial3
旗標,它將組件切換到新的 Material 3 外觀。
最後但並非最不重要的一點是,**我們已新增 1,028 個新的 Material 圖示**。
可以在 跟踪我們 Material 3 工作的議題 中找到更新;歡迎您提供您的回饋。
整合測試改進
在 2020 年 12 月,我們宣布了一種使用 integration_test 套件 進行端到端測試的新方法。這個新的套件取代了 flutter_driver
套件,成為進行整合測試的推薦方法,它提供了一些新功能,例如 Firebase Test Lab 支援以及對 Web 和桌面的支援。
從那時起,我們在整合測試方面又進行了進一步的改進,包括 將 integration_test
套件捆綁到 Flutter SDK 本身,使其更容易與您的應用程式整合。還有一個 **新的 遷移指南,如果您要將現有的 flutter_driver
測試遷移到 integration_test
**。
幾個 現有的 文件,範例 和 codelab 也已更新為 integration_test
。要開始使用,請將您的瀏覽器指向 flutter.dev 上的 測試 Flutter 應用程式 頁面。如果您還沒有在 Flutter 應用程式中使用 integration_test
,現在是開始的時候了!
Flutter DevTools
我們也在這個版本中為 Flutter DevTools 做了一些工作,包括如果您從命令列使用 DevTools 的一個易用性功能。您現在不再需要使用 pub global activate
來下載和執行最新版本,而是可以 直接使用 dart devtools
並獲得與您正在使用的 Flutter 版本保持一致的版本。
我們還進行了一些 許多 可用性 更新,包括 改進了在除錯器變數窗格中檢視大型列表和映射的支援(感謝 elliette)。
最後,我們即將發佈 年度 DevTools 調查!請提供您的回饋,幫助我們改進您的開發體驗。
這個調查提示將在 2 月中旬左右直接顯示在 DevTools 中。謝謝!
VSCode 改進
Flutter 的 Visual Studio Code 擴展也獲得了一些增強功能,包括 在程式碼中更多位置顯示顏色預覽 和 一個可以為您更新程式碼的顏色選擇器。
此外,如果您想成為 VSCode 的 Dart 和 Flutter 擴展的預發行版本的測試人員,您可以在 [擴展設定中切換到預發行版本](https://github.com/Dart-Code/Dart-Code/issues/
3729)。
您可以在 flutter-announce 郵件列表 上的 這篇文章 中閱讀有關此更新的詳細資訊以及更多內容。
移除 dev 頻道
在 Flutter 2.8 版本 中,我們宣布我們正在進行 移除 dev 頻道 的工作,簡化您的選擇,並減少工程開銷。在此版本中,我們已完成這項工作,包括:
- 更新了 Flutter 工具,以幫助開發人員從 dev 頻道遷移
- 更新了 Wiki 以反映更新後的客戶承諾
- 更新了棄用政策
- 從 DartPad、預提交測試和網站中移除 dev 頻道支援
dev 頻道現在已經被清除了。如果您發現我們遺漏了某個地方,請 告訴我們。
停止支援 iOS 9.3.6
由於使用率下降以及在實驗室中維護目標設備的難度越來越大,我們正在 停止支援 iOS 9.3.6,將其從「支援」層級移動到「最佳努力」層級。這意味著對 iOS 9.3.6 和 32 位 iOS 設備的支援將僅透過編碼實務、臨時和社群測試來維護。
在 2022 年第三季度的穩定版本中,我們預計將從 Flutter 穩定版本中刪除對 32 位 iOS 設備和 iOS 版本 9 和 10 的支援。這意味著從那時起針對穩定版 Flutter SDK 構建的應用程式將不再能在 32 位 iOS 設備上運行,Flutter 支援的最低 iOS 版本將升級到 iOS 11。
重大變更
我們還努力讓每個版本中都 只有少數重大變更,而這個版本雖然還沒有完全達到零,但我們會繼續努力!
如果您仍然使用這些 API,您可以 閱讀 flutter.dev 上的遷移指南。與往常一樣,非常感謝社群為 貢獻測試,這些測試幫助我們識別出這些重大變更。
總結
來自 Google Flutter 團隊的所有人,我們想說 - 謝謝。謝謝您成為社群的一部分,幫助 Flutter 成為最受歡迎的跨平台 UI 工具包,這一點得到了 Statista 和 SlashData 等分析師的認可。對 Windows 的穩定支援只是我們忙碌的一年的開始,我們迫不及待地想看到我們一起構築的每一樣東西!
Flutter 2.10 的新功能 最初發佈在 Flutter 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。