挑重點,F(xiàn)lutter 2.5 來了
Flutter 官方于 9 月 9 日正式發(fā)布了 2.5 版本,這個版本關(guān)閉了 4600 個問題,從 252 個貢獻(xiàn)者和 216 個審閱者合并了 3932 個 PR??梢哉f這是一個大版本。
這個版本繼續(xù)了許多重要的性能和工具改進(jìn),用來跟蹤應(yīng)用程序中的性能問題。同時還有許多新功能,包括對 Android 的全屏支持、更多 Material You(也稱為 v3)支持、更新的文本編輯以支持可切換的鍵盤快捷鍵、Widget Inspector,對在 Visual Studio Code 項目中添加依賴項的新支持,對從 IntelliJ/Android Studio 中的測試運行獲取覆蓋率信息的新支持,以及一個全新的應(yīng)用程序模板。
接下來就一起來看看這些新特性。
性能
從離線訓(xùn)練運行 (#25644) 中連接 Metal 著色器預(yù)編譯,將最壞情況的幀光柵化時間減少了 2/3 秒。另外對 UI 隔離事件循環(huán)上的調(diào)度策略 (#25789) 進(jìn)行了改進(jìn)后,幀處理現(xiàn)在優(yōu)先于處理其他異步事件,從而在我們的測試中消除了來自網(wǎng)絡(luò)、文件系統(tǒng)、插件或其他隔離的異步事件產(chǎn)生的卡頓。

此前,垃圾收集器 (GC) 暫停 UI 線程以回收內(nèi)存,某些圖像的內(nèi)存只會延遲回收以響應(yīng) Dart VM 執(zhí)行的 GC。之前的解決方案是 Flutter 引擎會向 Dart VM 暗示圖像內(nèi)存可以通過 GC 回收,這在理論上可以導(dǎo)致更及時的內(nèi)存回收。但在實踐中,這導(dǎo)致了過多的 GC,并且有時仍然無法足夠快地回收內(nèi)存以避免內(nèi)存受限設(shè)備上的低內(nèi)存情況。而 Flutter 2.5 中,未使用的圖像的內(nèi)存被快速地回收(#26219、#82883、#84740),大大減少了 GC。

Flutter 2.5 的另一個性能改進(jìn)是在 Dart 和 Objective-C/Swift (iOS) 或 Dart 和 Java/Kotlin (Android) 之間發(fā)送消息時的延遲。通常,作為調(diào)整消息頻道的一部分,從消息編解碼器中刪除不必要的副本可將延遲減少多達(dá) 50%,具體取決于消息大小和設(shè)備 (#25988、#26331)。

針對 iOS,還有一個性能更新:在此版本中,基于 Apple Silicon M1 Mac 構(gòu)建的 Flutter 應(yīng)用程序在 ARM iOS 模擬器上本地運行 (#pull/85642)。這意味著 Intel x86_64 指令和 ARM 之間沒有 Rosetta 轉(zhuǎn)換,這提高了 iOS 應(yīng)用程序測試期間的性能,并允許您避免一些微妙的 Rosetta 問題(#74970,#79641)。
Dart 2.14
Flutter 2.5 是與 Dart 2.14 一起發(fā)布。新版本的 Dart 帶有新的格式,使級聯(lián)更加清晰,新的 pub 支持忽略文件,以及新的語言功能,包括三重移位運算符的回歸。此外,也是 Dart 2.14 最好的事情之一,是此版本創(chuàng)建了一組標(biāo)準(zhǔn)的 lint,在新的 Dart 和 Flutter 項目之間共享,開箱即用。

框架
Flutter 2.5 版本包括對框架的許多修復(fù)和改進(jìn)。從 Android 開始,修復(fù)了一系列與全屏模式相關(guān)的問題。模式本身的名稱使其成為我們最喜歡的新功能之一:向后傾斜、粘性、粘性沉浸式和edge to edge。此更改還添加了一種在其他模式下收聽全屏更改的方法。例如,如果用戶與應(yīng)用互動,當(dāng)系統(tǒng) UI 返回時,開發(fā)人員現(xiàn)在可以編寫代碼以返回全屏或執(zhí)行其他操作。

這個版本繼續(xù)構(gòu)建對新 Material You(又名 v3)規(guī)范的支持,包括對浮動操作按鈕大小和主題的更新(#86441),以及可以在示例中看到的新 MaterialState.scrolledUnder 狀態(tài) PR 中的代碼 (#79999)。

另一個改進(jìn)是添加了滾動指標(biāo)通知(#85221、#85499),即使用戶沒有滾動,它也會提供可滾動區(qū)域的通知。例如,下圖顯示了滾動條根據(jù) ListView 的底層大小酌情出現(xiàn)或消失:

在這種情況下,您不必編寫任何代碼,但如果您想捕獲 ScrollMetricNotification 更改,則可以這么操作。
在 Flutter 2.5 中,現(xiàn)在可以在腳手架的頂部添加一個橫幅,該橫幅會一直保持到用戶關(guān)閉它為止。

插件
相機(jī)插件有很多改進(jìn)的點:
支持 Android 相機(jī)功能的基類
Android 自動對焦功能
Android曝光相關(guān)功能
Android 閃光和變焦功能
Android FPS 范圍、分辨率和傳感器方向功能
Android 曝光和焦點功能
Android降噪功能
最終實現(xiàn)的支持模塊
在 iOS 上不觸發(fā)平面設(shè)備方向
修復(fù)坐標(biāo)旋轉(zhuǎn)以在 iOS 上設(shè)置焦點和曝光點
修復(fù)相機(jī)預(yù)覽并不總是在方向改變時重建
設(shè)置不受支持的 FocusMode 時防止崩潰
引入camera_web包
image_picker 插件改進(jìn)點:
圖像選擇器修復(fù)相機(jī)設(shè)備
將相機(jī)捕獲的存儲位置更改為 Android 上的內(nèi)部緩存,以符合新的 Google Play 存儲要求
刪除了對相機(jī)權(quán)限的冗余請求
當(dāng)相機(jī)是源時修復(fù)旋轉(zhuǎn)
另外,攝像頭插件的早期版本可用于 web 支持,為在 Web 上查看相機(jī)預(yù)覽、拍照、使用閃光燈和縮放控件提供基本支持。
在 Flutter 2.5 中,F(xiàn)lutter 團(tuán)隊的每個相應(yīng)插件現(xiàn)在都帶有類似以下的電池建議:

Flutter DevTools
Flutter 2.5 對 Flutter DevTools 進(jìn)行了許多改進(jìn)。首先是 DevTools 中增加的支持以利用引擎更新(#26205、#26233、#26237、#26970、#27074、#26617)。其中一組更新使 Flutter 能夠更好地將跟蹤事件與特定框架相關(guān)聯(lián),這有助于開發(fā)人員確定框架可能超出預(yù)算的原因??梢栽?DevTools Frames 圖表中看到這一點,在這個圖表中選擇一個幀導(dǎo)航到該幀的時間線事件:

Flutter 引擎現(xiàn)在還可以識別時間線中的著色器編譯事件。Flutter DevTools 使用這些事件來幫助您診斷應(yīng)用程序中的著色器編譯卡頓。

此外,當(dāng)跟蹤應(yīng)用程序中的 CPU 性能問題時,您可能會被來自 Dart 和 Flutter 庫和/或引擎本機(jī)代碼的分析數(shù)據(jù)淹沒。如果您想關(guān)閉其中任何一項以專注于您自己的代碼,您可以使用新的 CPU Profiler 功能 (#3236) 來實現(xiàn),該功能使您能夠從任何這些來源中隱藏分析器信息。


Flutter 2.5 版本的 DevTools 附帶了對 Widget Inspector 的更新,允許您將鼠標(biāo)懸停在小部件上以評估對象、視圖屬性、小部件狀態(tài)等。

IntelliJ/Android Studio
Flutter 的 IntelliJ/Android Studio 插件在 2.5 版本中也進(jìn)行了許多改進(jìn),首先是運行集成測試的能力 (#5459)。集成測試是在設(shè)備上運行的整個應(yīng)用程序測試,位于 integration_test 目錄中,并使用與小部件單元測試相同的 testWidgets() 功能。

最新版本還包括預(yù)覽來自 pub.dev 包中使用的圖標(biāo)的新功能,這些包圍繞 TrueType 字體文件(#5504、#5595、#5677、#5704)構(gòu)建,就像 Material 和 Cupertino 圖標(biāo)支持預(yù)覽一樣。

Visual Studio Code
Flutter 的 Visual Studio Code 插件也在此版本中得到了改進(jìn),包含了兩個新命令“Dart: Add Dependency”和“Dart: Add Dev Dependency”(#3306,#3474)。

在 Visual Studio Code 中添加 Dart 依賴項
這些命令開箱即用,并提供定期從 pub.dev 獲取的包類型過濾列表。
而 Fix All 命令可以一步修復(fù)所有與 dart fix 相同的問題。

這也可以通過將 source.fixAll 添加到 editor.codeActionsOnSave VS Code 設(shè)置來設(shè)置為在保存時運行。
如果您想嘗試預(yù)覽功能,您可以啟用 dart.previewVsCodeTestRunner 設(shè)置并查看通過新的 Visual Studio Code 測試運行程序運行的 Dart 和 Flutter 測試。

工具
在 Flutter 2.5 版本中,調(diào)試器現(xiàn)在可以在未處理的異常上正確中斷,這改善了調(diào)試體驗,因為您的調(diào)試器現(xiàn)在可以將您直接指向他們代碼中的拋出行,而不是指向框架深處的隨機(jī)行。一個相關(guān)的新功能使您能夠決定 FutureBuilder 是否應(yīng)該重新拋出或吞下錯誤 (#84308)。
Counter 應(yīng)用模板具有許多優(yōu)點:它展示了 Dart 語言的許多特性,展示了幾個關(guān)鍵的 Flutter 概念,并且它足夠小,可以放入單個文件中,即使有很多的解釋性評論。然而,它沒有為現(xiàn)實世界的 Flutter 應(yīng)用程序提供一個特別好的起點。在 2.5 版本中,通過以下命令提供了一個新模板 (#83530):
$ flutter create -t skeleton my_app
新的模板生成遵循社區(qū)最佳實踐的兩頁列表視圖 Flutter 應(yīng)用程序。
另外,如果您正在開發(fā)插件而不是應(yīng)用程序,那么您可能會對 Pigeon 1.0 版本感興趣。Pigeon 是一個代碼生成工具,用于在 Flutter 及其主機(jī)平臺之間生成類型安全的互操作代碼。它允許您定義插件 API 的描述,并為 Dart、Java 和 Objective-C(分別可用于 Kotlin 和 Swift)生成框架代碼。

重大更改和棄用
以下是 Flutter 2.5 版本中的重大變化:
* 默認(rèn)拖動滾動設(shè)備
* 在 v2.2 之后刪除了棄用的 API
* 引入包:flutter_lints
* ThemeData 的 accent 屬性已被棄用
* GestureRecognizer Cleanup
* 用 collate 替換 AnimationSheetBuilder.display
* 使用 HTML 插槽在 Web 中呈現(xiàn)平臺視圖
* 將 LogicalKeySet 遷移到 SingleActivator
此外,隨著 Flutter 2.5 版本的發(fā)布,將棄用 2020 年 9 月宣布的對 iOS 8 的支持。放棄對市場份額不到 1% 的 iOS 8 的支持,使 Flutter 團(tuán)隊能夠?qū)W⒂诟鼜V泛使用的新平臺。棄用意味著這些平臺可以工作,但我們不會在這些平臺上測試 Flutter 的新版本或插件。
-End-
最近有一些小伙伴,讓我?guī)兔φ乙恍?nbsp;面試題 資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!

面試題】即可獲取
