flutter 3.3正式發(fā)布妖谴,原文鏈接
https://medium.com/flutter/whats-new-in-flutter-3-3-893c7b9af1ff
本地化: CFUG 團隊: @AlexV525沟绪、@chenglu署照、@Vadaski、@Nayuta403
中文鏈接: https://flutter.cn/posts/whats-new-in-flutter-3-3
flutter 3.3正式發(fā)布谷婆,幾個我比較感興趣的點整理如下
go_router 發(fā)布
當你的應用包含復雜的導航需求時肩杈,它可能會讓你暈頭轉(zhuǎn)向杏愤。為了擴展 Flutter 的導航 API,團隊發(fā)布了新版本的 go_router package[17]驼仪,讓你在所有平臺的路由邏輯設計變得更加簡潔掸犬。
go_router package 由 Flutter 團隊進行維護,通過聲明式和基于 URL 的 API 讓導航和 deep links 的處理變得更加輕松绪爸。最新的 5.0 版本讓應用可以通過異步代碼進行重定向湾碎,其中還包含了一些 破壞性改動 https://files.flutter-io.cn/flutter-design-docs/[Draft]Go_Router%205.0%20migration%20guide%20(PUBLICLY%20SHARED).docx。
更多內(nèi)容請查看官方文檔:路由和導航http://flutter.cn/docs/development/ui/navigation奠货。
性能改進
Raster 緩存改善
本次更新提升了加載資源圖片的性能介褥,減少了圖片數(shù)據(jù)的拷貝和 Dart 垃圾回收 (GC) 的壓力。先前在加載資源圖片時递惋,ImageProvider 需要復制多次壓縮的數(shù)據(jù)柔滔。首先,打開圖片時數(shù)據(jù)會被拷貝至原生的堆內(nèi)存并向 Dart 暴露出結(jié)構(gòu)數(shù)組萍虽。然后睛廊,數(shù)據(jù)會在結(jié)構(gòu)數(shù)組轉(zhuǎn)換至內(nèi)置存儲的 ui.ImmutableBuffer 時被再次拷貝。
隨著 新增的 ui.ImmutableBuffer.fromAsset 的引入[27]杉编。這個加載過程同時也會更加快速超全,因為它會繞過之前方法通道所需的額外調(diào)度的開銷咆霜。特別是在我們的基準測試中,圖片的加載速度提升為原先的 2 倍左右嘶朱。
框架穩(wěn)定性
禁用 iOS 內(nèi)存指針壓縮
在 Flutter 2.10 穩(wěn)定版的發(fā)布中蛾坯,我們?yōu)?iOS 啟用了 Dart 的內(nèi)存指針壓縮優(yōu)化。但是疏遏,Yeatse 在 GitHub 上提醒我們這項優(yōu)化中包含了我們并未預料到的后果[29]脉课。Dart 通過為堆保持一個大的虛擬內(nèi)存來實現(xiàn)指針壓縮。由于 iOS 上允許的總虛擬內(nèi)存少于其他平臺改览,因此其他例如 Flutter 插件之類的組件可持有的虛擬內(nèi)存便減少了下翎。
雖然禁用了指針壓縮會增加 Dart 對象消費的內(nèi)存,但是它也恢復了 Flutter 應用可用的非 Dart 部分的內(nèi)存宝当,總體來說是更合適的方案视事。
應用可以增加最大虛擬內(nèi)存的分配量,但這項操作僅在較新的 iOS 版本上可用庆揩,并不適用于其他 Flutter 支持的 iOS 設備版本俐东。當我們能夠在所有位置使用這項優(yōu)化時,我們會重新進行評估订晌。
API 改進
PlatformDispatcher.onError
在先前的版本中虏辫,你需要手動配置一個自定義的 Zone 來捕獲應用的所有異常和錯誤。然而锈拨,自定義的 Zone 并不適用于 Dart 核心庫中的一些優(yōu)化砌庄,會減慢應用的啟動時間。在本次更新中奕枢,你可以通過設置 PlatformDispatcher.onError 回調(diào)來捕獲所有的錯誤和異常娄昆,代替自定義的 Zone。更多內(nèi)容請查看已經(jīng)更新的官方文檔:在 Flutter 里處理錯誤[30]缝彬。
FragmentProgram 更新
用 GLSL 編寫的并且在 pubspec.yaml 的 shader: 部分聲明的片段著色器 (Fragment shader) 現(xiàn)在會自動編譯成引擎可以正確識別的格式萌焰,并且自動綁定為應用的資源。有了這項改動谷浅,開發(fā)者無需再使用三方工具編譯著色器扒俯。在未來,引擎的 FragmentProgram API 可能只能接受來自 Flutter 的工具構(gòu)建一疯。目前我們還沒應用這項更改撼玄,但如 FragmentProgram API 改進支持的設計文檔[31] 中所計劃的,有可能在未來實行违施。
想要了解更多內(nèi)容互纯,你可以查看這個 Flutter 著色器示例[32]。
布局小數(shù)處理
在先前的版本中磕蒲,F(xiàn)lutter 引擎會將合成層精準地對齊像素留潦,用于提升 Flutter 在舊款 iPhone (32 位) 上的渲染性能只盹。而在我們添加桌面平臺的支持后,我們注意到這項操作會導致肉眼可見的抖動兔院,因為桌面平臺的是設備像素比通常會更低殖卑。例如在較低的 DPR 設備上,提示會在漸入時產(chǎn)生的明顯抖動坊萝。在確定更新的 iPhone 設備并不需要這項優(yōu)化后孵稽,我們已從 Flutter 引擎中將其移除[33],來改善桌面端的渲染保真度十偶。
此外我們還發(fā)現(xiàn)菩鲜,將這些像素對齊移除后,先前在黃金鏡像測試 (golden image test) 時候出現(xiàn)的細微渲染差異也變得更穩(wěn)定了惦积。