一文掌握Flutter 2.10新特性

image

期待已久的新教程上線啦!解鎖Flutter開發(fā)新姿勢,一網(wǎng)打盡Flutter最新與最熱技術(shù),點我Get!!!

Flutter 2.10 版已正式發(fā)布!雖然? 上次穩(wěn)定版本發(fā)布 以來還不到兩個?,即使在這么短的時間內(nèi),F(xiàn)lutter官方也已處理和關(guān)閉了 1843 個 Issue,合并了來?全球 155 位貢獻(xiàn)者的 1525 個 PR。

Flutter 2.10 包括 Flutter 對 Windows ?持的重?更新、?項重?的性能改進(jìn)、框架中圖標(biāo)和顏?的新?持以及一些?具改進(jìn)等。此外,該版本還包括移除了 dev 渠道的更新、減少對舊版 iOS 的?持以及幾個簡短的破壞性改動。接下來讓Flutter來一睹Flutter 2.10的更新吧:

使用 Flutter 構(gòu)建 Windows 桌面應(yīng)用支持已經(jīng)進(jìn)入穩(wěn)定階段

?先,F(xiàn)lutter 2.10 版本帶來了穩(wěn)定的 Windows ?持,無需再通過 --enable-windows-desktop 標(biāo)記來單獨配置 Windows 桌面版應(yīng)用程序的支持,因為它現(xiàn)在已經(jīng)默認(rèn)被啟用!

當(dāng)然,此次穩(wěn)定版發(fā)布肯定不只是“刪掉”一個標(biāo)記這么簡單 ;-) 在 Flutter 2.10 的 Windows 支持中,也包含了對?本處理、鍵盤處理和鍵盤快捷鍵的?泛改進(jìn),以及直接與 Windows 集成的新方式、?持命令行參數(shù)、全球化?本輸?和無障礙功能等。

有關(guān) Windows 穩(wěn)定版發(fā)布的更多信息,你可以閱讀《Flutter for Windows桌面端穩(wěn)定版發(fā)布》,文章為大家詳述了 Flutter 在 Windows 上的架構(gòu),同時說明了有多少 Flutter package 和插件已經(jīng)?持 Windows。你還可以查看Flutter的?具和應(yīng)?合作伙伴在 Windows 上使? Flutter 制作的一些?例等。

引擎的性能改進(jìn)

此版本的 Flutter 包括由社區(qū)成員 knopp提供的 繪制臟區(qū)管理 的初步?持,他為 iOS/Metal 上的單個臟區(qū)域啟?了選擇性重繪。這一變化將一些基準(zhǔn)測試中九十分位和九十九分位的光柵化時間減少了一個數(shù)量級,并將這些基準(zhǔn)測試中的 GPU 利?率從 90% 以上降低到了 10% 以下。

優(yōu)化后的 Skia 渲染基準(zhǔn)測試數(shù)據(jù) 1

Flutter希望在未來的版本中,將選擇性重繪的優(yōu)勢引入到其他平臺

在Flitter 2.8版本中,F(xiàn)lutter獲得了自己的內(nèi)部圖片錄制格式?,F(xiàn)在在Flatter 2.10中,F(xiàn)lutter已經(jīng)開始用它進(jìn)行優(yōu)化。例如,不透明層的一種常見情況現(xiàn)在可以更有效地實現(xiàn)。即使在最壞的情況下,F(xiàn)lutter基準(zhǔn)測試中的幀光柵時間也降到了之前值的三分之一以下。

優(yōu)化后的 Skia 渲染基準(zhǔn)測試數(shù)據(jù) 2

隨著Flutter繼續(xù)開發(fā)記錄格式,將來會繼續(xù)將該優(yōu)化擴(kuò)展到更多的場景。

在 profile 和 release 模式下,Dart 代碼將以 AOT 方式編譯。這段代碼的輕量和高效的關(guān)鍵來源于整個程序的類型流分析,它解鎖了許多編譯器優(yōu)化和激進(jìn)的搖樹優(yōu)化 (tree-shaking)。但由于類型流分析必須涵蓋整個程序,因此可能會有些消耗性能。新版本帶來了 更快的類型流分析實現(xiàn)。在Flutter的基準(zhǔn)測試中,F(xiàn)lutter 應(yīng)?的總體構(gòu)建時間下降了約 10%。

優(yōu)化后的構(gòu)建時間

與往常一樣,性能增強、減少內(nèi)存使?和減少延遲是 Flutter 團(tuán)隊的?要任務(wù)。期待未來版本的進(jìn)一步改進(jìn)。

Android 平臺更新

Flutter 2.10 版本還包含許多針對 Android 平臺的改進(jìn)?,F(xiàn)在在默認(rèn)情況下,當(dāng)你創(chuàng)建新應(yīng)?時,Flutter 默認(rèn)?持最新版本的 Android,即 Android 12(API 級別 31)。此外,在此版本中,F(xiàn)lutter啟?了 multidex ?動?持。如果您的應(yīng)??持低于 21 的 Android SDK 版本,并且超過了 64K 的 dex ?法數(shù)限制,只需將 --multidex 參數(shù)傳遞給 flutter build appbundleflutter build apk 命令,你的應(yīng)?就會增加 multidex 的?持。

最后,在Flutter收到開發(fā)者們對于 Gradle 拋出讓人費解的錯誤消息的反饋后,F(xiàn)lutter調(diào)整了 Flutter 命令行工具,現(xiàn)在它將 為常?問題提供解決方法。例如,如果你向你的應(yīng)?添加了一個插件,該插件需要您提?最低支持的 Android SDK 版本,你現(xiàn)在會在錯誤信息中看到「Flutter Fix」的建議。

Gradle 錯誤提示

Flutter將繼續(xù)為常?錯誤消息添加更多解決方法的建議,并希望獲得你對其他錯誤消息的反饋,這些錯誤消息將顯著幫助開發(fā)者處理同類問題。

iOS 平臺更新

除了性能改進(jìn)之外,F(xiàn)lutter還添加并增強了一些特定平臺的功能。luckysmg 就為Flutter帶來了一項 iOS 上新的增強功能——更流暢的鍵盤動畫,它會?動應(yīng)用在你的應(yīng)用中。

iOS 鍵盤過渡動畫

除此以外,F(xiàn)lutter還通過修復(fù)一些 邊緣情況崩潰提?了 iOS 相機插件的穩(wěn)定性。

最后,Flutter為 64 位架構(gòu)的 iOS 系統(tǒng)加入減少內(nèi)存使?的新功能:壓縮指針。

64 位架構(gòu)將指針表?為 4 字節(jié)大小的數(shù)據(jù)結(jié)構(gòu)。當(dāng)你有大量對象時,指針本?占?的空間會增加應(yīng)?整體的內(nèi)存占用,特別是如果你的應(yīng)?更龐大更復(fù)雜時,這些應(yīng)?有更多的 GC 抖動。然而,iOS 應(yīng)?不太可能有?夠的對象來占?大部分的 32 位地址空間(20 億個對象),更不?說龐?的 64 位地址空間(900 億個對象)了。

Dart 2.15 中引入了壓縮指針的功能,在這次發(fā)布的 Flutter 版本中,F(xiàn)lutter使?這項功能來減少 64 位 iOS 應(yīng)?的內(nèi)存使?量。

Web 平臺更新

此版本還包含對 Web 平臺的一些改進(jìn)。例如,在先前的版本中,當(dāng)鼠標(biāo)拖動到多行文本框的邊緣時,它不會正確地跟隨滾動。在此版本中,當(dāng)選擇光標(biāo)拖出了文本框時,文本框會進(jìn)行滾動,瀏覽并選中對應(yīng)的文字內(nèi)容。此行為同時適?于 Web 平臺和桌?端。

在 Web 平臺選中并拖拽 TextField 光標(biāo)

Flutter 2.10 還包括對 Web 平臺的另一項顯著改進(jìn),F(xiàn)lutter也一直在尋求減少將 Flutter 應(yīng)用運行到 Web 平臺的開銷,在先前的版本中,每次Flutter想要將原? HTML 的 widget 引? Flutter 應(yīng)?時,F(xiàn)lutter都需要一個覆蓋層 (Overlay) 作為Flutter對 Web 的平臺視圖 (Platform view) ?持的一部分。這些疊加層中的每一個都?持?定義繪制,但同時也代表了一定數(shù)量的性能開銷。如果你的應(yīng)?中有?量原? HTML 的 widget (例如鏈接),那這將造成非常大性能開銷。在這個版本中Flutter為 Web 平臺構(gòu)建了一個新的「?繪制的平臺視圖」,已經(jīng)基本上消除了這種開銷。Flutter已經(jīng) 將這種優(yōu)化 應(yīng)用到 Link widget 中,這意味著如果您的 Flutter Web 應(yīng)?中有?量的鏈接,它們將不再產(chǎn)生額外的性能消耗。隨著時間的推移,F(xiàn)lutter會將此優(yōu)化應(yīng)?到其他的 widget。

Material 3

此版本是向 Material 3 過渡的開始,其中包括 從單一種?顏??成整個配??案 的能力。

你可以使用任意顏色來創(chuàng)建新的 ColorScheme 類型:

final lightScheme = ColorScheme.fromSeed(seedColor: Colors.green);
final darkScheme = ColorScheme.fromSeed(seedColor: Colors.green, brightness: Brightness.dark);

ThemeData 的構(gòu)造函數(shù)還有一個新的 colorSchemeSeed 參數(shù),可以直接從顏色?成主題的配??案:

final lightTheme = ThemeData(colorSchemeSeed: Colors.orange, ...); 
final darkTheme = ThemeData(colorSchemeSeed: Colors.orange, brightness: Brightness.dark, ...); 

此外,此版本包括了 ThemeData.useMaterial3 的參數(shù),它可以將 widget 切換到新的 Material 3 外觀

最后,F(xiàn)lutter添加了 1028 個新的 Material 圖標(biāo)

1028 個圖標(biāo)的部分預(yù)覽

你可以在 這個 issue 中 跟進(jìn) Material 3 的接入情況,并隨時留下你的意見反饋。

集成測試改進(jìn)

2020 年 12 ?,F(xiàn)lutter宣布了使? integration_test 進(jìn)行端到端測試的新?法,查看中文文檔 集成測試介紹 了解更多。這個新的 package 取代了 flutter_driver 作為進(jìn)行集成測試的推薦?式,提供了新功能,如 Firebase 測試實驗室?持以及對 Web 和桌?的?持。

從那時起,F(xiàn)lutter對集成測試進(jìn)行了進(jìn)一步改進(jìn),包括 integration_test package 內(nèi)置在 Flutter SDK 中,使其更容易與您的應(yīng)?集成?,F(xiàn)在,F(xiàn)lutter撰寫了一份新的遷移指南,幫助你 從 flutter_driver 測試遷移到 integration_test。

現(xiàn)有的?檔、示例codelab 也已針對 integration_test 進(jìn)行了更新。如果你還沒有在 Flutter 應(yīng)?上使? integration_test,那么從現(xiàn)在就開始吧!

DevTools

在這個版本中,F(xiàn)lutter也在 Flutter DevTools 上做了一些改進(jìn)?作,包括從命令行直接使? DevTools 的簡易功能。現(xiàn)在你?需使? pub global activate 來下載和運行最新版本的 devtools,只需簡單地使? dart devtools 獲取與你正在使?的 Flutter 版本一致的最新版本即可。

Flutter還進(jìn)行了一些 可?性更新,包括 改進(jìn)在調(diào)試器變量窗格中檢查?型列表和映射 的?持(感謝 Elliott)。

在 DevTools 中查看大型列表和映射

最后,F(xiàn)lutter即將發(fā)布年度 DevTools 問卷調(diào)查!請?zhí)峁┠愕姆答伈椭鶩lutter改善你的開發(fā)體驗。

該調(diào)查提?將在 2 ?中旬的某個時間直接顯?在 DevTools 中,敬請參與并踴躍反饋!

VSCode 改進(jìn)

Flutter 的 Visual Studio Code 擴(kuò)展也獲得了許多增強功能,包括 在代碼的更多位置預(yù)覽顏色 以及 可更新顏色代碼的顏?選擇器。

VSCode 的 Flutter 顏色選擇器

此外,如果你想成為 VSCode 的 Dart 和 Flutter 擴(kuò)展的預(yù)發(fā)布版本的測試?員,你可以 在你的擴(kuò)展設(shè)置中切換到預(yù)發(fā)布版本。

使用預(yù)發(fā)布版本的插件

你可以在 flutter-announce 郵件列表的 這一篇 閱讀有關(guān)此更新的詳細(xì)信息。

移除 dev 版本發(fā)布渠道

在 Flutter 2.8 版本中,F(xiàn)lutter宣布Flutter正在努力移除 dev 版本發(fā)布渠道,以簡化你的選擇并減少研發(fā)的開銷。在這個版本中,F(xiàn)lutter已經(jīng)完成了這項?作,包括:

  • 更新 Flutter ?具以幫助將開發(fā)?員遷移出開發(fā)頻道
  • 更新 wiki 對于各個渠道的說明和承諾
  • 更新棄?政策
  • 從 DartPad、預(yù)提交測試和?站中刪除 dev 渠道的?持

Dev 渠道現(xiàn)已被徹底移除。如果Flutter漏了一些沒有移除的位置,請告訴Flutter。

對 iOS 9.3.6 的?持進(jìn)入尾聲

由于Flutter實驗室中?標(biāo)設(shè)備的使?減少和維護(hù)難度增加,F(xiàn)lutter正在 調(diào)整對于 iOS 9.3.6 的支持從「?持」到「盡力?為」。這意味著對 iOS 9.3.6 的?持和對 32 位 iOS 設(shè)備的?持將僅通過編碼實踐、Ad-Hoc 和社區(qū)測試來維護(hù)了。

Flutter預(yù)計在 2022 年第三季度的 Flutter 穩(wěn)定版本中放棄對 32 位 iOS 設(shè)備以及 iOS 版本 9 和 10 的 ?持。這意味著基于穩(wěn)定的 Flutter SDK 構(gòu)建的應(yīng)?將不再在 32 位 iOS 設(shè)備上運行,并且 Flutter ?持的最低 iOS 版本將增加到 iOS 11。

破壞性改動

Flutter還努力在每個版本和此版本中減少破壞性改動,盡管Flutter還沒有完全歸零,但Flutter會繼續(xù)努力!

如果您仍在使?這些 API,可以閱讀 flutter.dev 上的遷移指南。一如既往,?常感謝社區(qū)貢獻(xiàn)測試,幫助Flutter識別這些破壞性改動。

最后

Flutter精彩課程推薦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容