谷歌更新了Stable channel的新版 Flutter 1.17云头。
谷歌透露:今年到目前為止酒请,關(guān)閉的漏洞比打開(kāi)的漏洞多,導(dǎo)致凈減少了約800個(gè)問(wèn)題蔓纠。谷歌Flutter團(tuán)隊(duì)從231位貢獻(xiàn)者那里合并了3,164個(gè)PR辑畦,從而修復(fù)了許多錯(cuò)誤。
本次更新除了問(wèn)題修復(fù)和優(yōu)化外腿倚,包含了一些新功能纯出,包括iOS上的Metal支持,新的Material組件敷燎,新的Network跟蹤工具等等暂筝!此版本還包括Dart 2.8。
移動(dòng)性能和尺寸改進(jìn)
此版本的主要重點(diǎn)是性能和內(nèi)存改進(jìn)方面的總體工作硬贯。只需將您的應(yīng)用程序升級(jí)到此版本焕襟,您的用戶就會(huì)看到更快的動(dòng)畫(huà),更小的應(yīng)用程序和更低的內(nèi)存利用率饭豹。在此版本中鸵赖,默認(rèn)導(dǎo)航情況(不透明的不透明路線)的速度將提高20%-37%
。對(duì)于簡(jiǎn)單的iOS動(dòng)畫(huà)拄衰,您還將看到最多減少40%的CPU / GPU使用率
它褪,具體取決于硬件(在PR 14104和PR 13976中進(jìn)行了詳細(xì)介紹)。
此版本還提供了一個(gè)相當(dāng)大的應(yīng)用程序大小的改善是由于幾個(gè) 補(bǔ)丁 是 添加 了一個(gè)大的結(jié)果翘悉。例如茫打,Android的Flutter Gallery示例在2019年底為9.6MB,現(xiàn)在為8.1MB妖混,減少了18.5%老赤。
對(duì)于內(nèi)存使用,此版本將快速滾動(dòng)瀏覽大圖像減少了70%的內(nèi)存
制市,這也可能導(dǎo)致性能提高诗越,具體取決于設(shè)備的內(nèi)存量。
測(cè)試PR隨時(shí)間合并的應(yīng)用程序內(nèi)存使用情況(條形越短越好)
但是息堂,最廣泛的性能改進(jìn)是iOS中對(duì)Metal的支持。
Metal支持可將iOS的性能提高50%
蘋(píng)果公司在iOS上對(duì)Metal的支持幾乎可以直接訪問(wèn)底層GPU块促,并且是蘋(píng)果公司推薦的圖形API荣堰。在完全支持Metal的iOS設(shè)備上,F(xiàn)lutter現(xiàn)在默認(rèn)情況下使用它竭翠,這使您的Flutter應(yīng)用程序大多數(shù)時(shí)候運(yùn)行得更快振坚,平均將渲染速度提高了約50%(取決于您的工作量)。
對(duì)于不完全支持Metal的設(shè)備(A7處理器之前的版本或運(yùn)行10之前的iOS版本的設(shè)備)斋扰,F(xiàn)lutter會(huì)像過(guò)去一樣使用OpenGL渡八,從而為較舊的設(shè)備提供本地渲染速度啃洋。有關(guān)更多詳細(xì)信息,請(qǐng)?jiān)贔lutter Wiki上查看iOS上的Metal常見(jiàn)問(wèn)題屎鳍。
材質(zhì)小部件:NavigationRail宏娄,DatePicker等
改進(jìn)了Flutter中實(shí)施的材料設(shè)計(jì)系統(tǒng)。在此版本中逮壁,添加NavigationRail
了一個(gè)新的小部件孵坚,該小部件提供了響應(yīng)式應(yīng)用程序?qū)Ш侥P汀K怯蒅oogle Material Design團(tuán)隊(duì)設(shè)計(jì)和實(shí)施的窥淆。該NavigationRail是偉大的卖宠,可因?yàn)樗呛苋菀自谝粋€(gè)交換的移動(dòng)和臺(tái)式機(jī)外形之間切換應(yīng)用程序BottomNavigator為您的應(yīng)用程序的屏幕尺寸的增大。
要查看NavigationRail實(shí)際效果忧饭,請(qǐng)查看web_dashboard示例或在DartPad上嘗試扛伍。
除了新的小部件,此版本還包括“材質(zhì)” DatePicker和“文本選擇”溢出小部件的更新词裤。
此DatePicker
版本包括新的視覺(jué)效果刺洒,以匹配更新的“材料”準(zhǔn)則以及新的文本輸入模式。您可以在“ 物料日期選擇器重新設(shè)計(jì)”規(guī)范中閱讀有關(guān)詳細(xì)信息亚斋。
更新的文本選擇在Android上溢出
iOS上的更新文本選擇溢出
當(dāng)按鈕的長(zhǎng)度比沒(méi)有溢出時(shí)可以顯示的時(shí)間長(zhǎng)時(shí)作媚,文本選擇菜單現(xiàn)在可以提高Android和iOS的保真度。這在菜單項(xiàng)單詞可能更長(zhǎng)的語(yǔ)言環(huán)境中尤其明顯帅刊。
在與Flutter 1.17相同的時(shí)間范圍內(nèi)但帶外交付纸泡,F(xiàn)lutter團(tuán)隊(duì)還交付了新的Animations軟件包,該軟件包提供了實(shí)現(xiàn)新的Material motion規(guī)范的預(yù)構(gòu)建動(dòng)畫(huà)赖瞒。
來(lái)自Animations包的Container轉(zhuǎn)換的示例
在“實(shí)現(xiàn)運(yùn)動(dòng)”博客文章中女揭,材料設(shè)計(jì)團(tuán)隊(duì)定義了四個(gè)過(guò)渡模式,用于描述組件和全屏視圖之間的動(dòng)畫(huà):容器變換栏饮,共享軸吧兔,淡入和淡入。盡管這些動(dòng)畫(huà)在Flutter中始終可用袍嬉,但是Animations軟件包使實(shí)現(xiàn)它們變得相當(dāng)容易境蔼。將它們放到您的應(yīng)用中,今天就讓您的用戶滿意伺通!
實(shí)質(zhì)性文本比例:使Flutter文本主題現(xiàn)代化
在此版本中箍土,F(xiàn)lutter團(tuán)隊(duì)完成了2018 Material Design規(guī)范的Type Scale部分的實(shí)現(xiàn),同時(shí)沒(méi)有破壞現(xiàn)有的Flutter應(yīng)用程序罐监。2018年10月的PR 22330中增加了對(duì)新配置的選擇加入支持吴藻,但不對(duì)新名稱提供支持。現(xiàn)有的文本樣式名稱未更改弓柱,因?yàn)檫@樣做是一個(gè)重大的API更改沟堡,可能會(huì)影響大多數(shù)應(yīng)用程序侧但。此版本更新了TextTheme API以匹配當(dāng)前的Material規(guī)范,但保留了舊名稱航罗,以使您的代碼不會(huì)中斷禀横。但是,舊名稱已被棄用伤哺,因此您將收到警告燕侠,以鼓勵(lì)您采用新名稱。
下表總結(jié)了2018 Material TextStyle的名稱和配置立莉。
請(qǐng)注意绢彤,TextStyles
所謂的body1和body2在材料設(shè)計(jì)規(guī)范被稱為bodyText1和bodyText2的TextThemeAPI。同樣蜓耻,TextStyles所謂的H1-H6說(shuō)明書(shū)中被稱為headline1-headline6中TextThemeAPI茫舶。
Google字體用于Flutter
文字和字體齊頭并進(jìn),因此刹淌,如果您對(duì)新的Material Text Scale實(shí)現(xiàn)感到興奮饶氏,那么您可能也會(huì)對(duì)新的Flutter v1.0版Google字體感到興奮。
Google字體易于在Flutter應(yīng)用中使用
Google字體允許開(kāi)發(fā)人員在其應(yīng)用中輕松地嘗試和使用fonts.google.com中的任何字體有勾。當(dāng)應(yīng)用程序準(zhǔn)備發(fā)布時(shí)疹启,開(kāi)發(fā)人員將決定用戶是否通過(guò)從API下載字體來(lái)接收字體,或者它與應(yīng)用程序包預(yù)先捆綁在一起蔼卡。
可訪問(wèn)性和國(guó)際化
最后喊崖,可訪問(wèn)性是Flutter團(tuán)隊(duì)持續(xù)關(guān)注的一個(gè)重要領(lǐng)域,F(xiàn)lutter應(yīng)用程序?qū)τ诒M可能廣泛的受眾可用是一個(gè)優(yōu)先事項(xiàng)雇逞。在此發(fā)行版中荤懂,已完成了全部工作,包括滾動(dòng)塘砸,文本 字段和其他輸入小部件的可訪問(wèn)性修復(fù)程序节仿。您將在GitHub的該版本中看到有關(guān)可訪問(wèn)性問(wèn)題的完整列表。Flutter團(tuán)隊(duì)鼓勵(lì)您測(cè)試自己的應(yīng)用程序的可訪問(wèn)性掉蔬,并且還通過(guò)一些推薦的最佳實(shí)踐更新了此版本中的文檔廊宪。
在國(guó)際化方面,F(xiàn)lutter團(tuán)隊(duì)一直在研究一些影響三星鍵盤輸入法的問(wèn)題女轿,這些問(wèn)題影響了各種東亞語(yǔ)言的文本輸入箭启。
工具:Dart DevTools移植到Flutter,Android快速入門等
此版本將Dart DevTools的當(dāng)前版本換成新的Flutter版本谈喳。如果想嘗試一下,可以啟動(dòng)DevTools并單擊DevTools右上角的“燒杯”圖標(biāo)戈泼。
當(dāng)您使用Flutter實(shí)現(xiàn)的Dart DevTools的預(yù)發(fā)布版本時(shí)婿禽,您可能會(huì)注意到各種改進(jìn)赏僧,但是最大的改進(jìn)是新的“ 網(wǎng)絡(luò)”選項(xiàng)卡。
如果未在Dart DevTools的預(yù)發(fā)行版中看到“網(wǎng)絡(luò)”選項(xiàng)卡(例如扭倾,如果從命令行運(yùn)行它)淀零,則可以使用以下命令手動(dòng)更新它:
$ pub globalactivate devtools
按下“記錄”按鈕后,“網(wǎng)絡(luò)”選項(xiàng)卡將顯示Flutter應(yīng)用程序的網(wǎng)絡(luò)流量膛壹。此外驾中,如果您希望從啟動(dòng)應(yīng)用程序時(shí)立即開(kāi)始捕獲網(wǎng)絡(luò)流量,則可以在main()方法中包括以下代碼行:
void main(){
/// 啟用網(wǎng)絡(luò)流量日志記
HttpClient.enableTimelineLogging = true;
runApp(MyApp());
}
除了更新的Dart DevTools
模聋,此版本還增加了對(duì)實(shí)驗(yàn)性“快速啟動(dòng)”選項(xiàng)的支持
肩民,該選項(xiàng)可讓您在定位Android時(shí)以高達(dá)70%的速度啟動(dòng)Flutter應(yīng)用程序調(diào)試。您可以通過(guò)訪問(wèn)此選項(xiàng)flutter run —-fast-start -d <your Android device>
链方。此選項(xiàng)將安裝僅依賴于您的插件代碼(不包括任何Dart代碼或資產(chǎn))的通用Android應(yīng)用持痰。這允許重復(fù)flutter run
命令的啟動(dòng)速度更快,因?yàn)閷?duì)Dart代碼或資產(chǎn)的更改不需要重新構(gòu)建APK祟蚀。此選項(xiàng)將您的應(yīng)用程序捆綁到實(shí)際上未在您的設(shè)備上安裝的通用Android“包裝器”中工窍,這與正常的啟動(dòng)選項(xiàng)不同。此外前酿,在某些情況下它不起作用患雏,例如,當(dāng)您使用訪問(wèn)后臺(tái)執(zhí)行的插件時(shí)罢维。另一方面淹仑,如果您的Android調(diào)試啟動(dòng)時(shí)間讓您失望,請(qǐng)嘗試一下言津。
如果您以Android為目標(biāo)攻人,則要注意的另一個(gè)變化是,現(xiàn)在創(chuàng)建新的Flutter項(xiàng)目時(shí)悬槽,AndroidX是唯一的選擇怀吻。AndroidX庫(kù)提供了稱為Android Jetpack的高級(jí)Android功能。在上一個(gè)版本中初婆,F(xiàn)lutter團(tuán)隊(duì)棄用了原始的Android支持庫(kù)蓬坡,并將其移至AndroidX作為所有新項(xiàng)目的默認(rèn)設(shè)置。在此版本中磅叛,- androidx標(biāo)志到flutter create
現(xiàn)在是唯一可用的選項(xiàng)屑咳。盡管不使用AndroidX的現(xiàn)有應(yīng)用程序可以繼續(xù)使用Flutter進(jìn)行編譯,但現(xiàn)在是遷移到新庫(kù)的好時(shí)機(jī)弊琴。
如果您是Android Studio或IntelliJ用戶兆龙,則會(huì)發(fā)現(xiàn)“熱重裝”功能更具彈性。在進(jìn)行此更改之前敲董,如果您有任何分析錯(cuò)誤紫皇,“熱重裝”將不會(huì)重裝您的代碼慰安。如果分析錯(cuò)誤不會(huì)影響您當(dāng)前正在運(yùn)行的代碼(例如在單元測(cè)試中),那么這可能會(huì)令人沮喪聪铺。進(jìn)行此更改后化焕,分析錯(cuò)誤不足以阻止Hot Reload正常運(yùn)行,而取決于VM的編譯器錯(cuò)誤铃剔。
如果您希望在Android Studio或IntelliJ的Flutter插件中更早地訪問(wèn)此類更改撒桨,F(xiàn)lutter團(tuán)隊(duì)現(xiàn)在為IntelliJ插件提供了一個(gè)開(kāi)發(fā)通道,您可以選擇該通道以更快地進(jìn)行更新键兜。開(kāi)發(fā)通道的目標(biāo)是在Flutter團(tuán)隊(duì)將它們廣泛發(fā)布之前凤类,從Flutter開(kāi)發(fā)人員那里收集有關(guān)IDE集成新功能的反饋。如果您喜歡冒險(xiǎn)蝶押,并希望向Flutter工具團(tuán)隊(duì)提供早期反饋踱蠢,請(qǐng)立即注冊(cè)!
對(duì)于Visual Studio Code用戶棋电,建議使用新的Dart:列出過(guò)期的軟件包命令茎截,該命令將運(yùn)行新的“ pub outdated”命令。
此命令旨在幫助您跟蹤依賴項(xiàng)中的版本控制問(wèn)題赶盔。
最后但并非最不重要的一點(diǎn)是企锌,如果您發(fā)現(xiàn)自己發(fā)生Flutter崩潰,這些工具將提示您提交錯(cuò)誤于未。
團(tuán)隊(duì)會(huì)密切關(guān)注這些錯(cuò)誤報(bào)告的嚴(yán)重性和頻率撕攒,因此請(qǐng)?jiān)诔霈F(xiàn)提示時(shí)進(jìn)行記錄。
Customer Shoutout: MGM and Superformula
當(dāng)然烘浦,F(xiàn)lutter的存在是為了實(shí)現(xiàn)美麗的應(yīng)用程序體驗(yàn)抖坪。數(shù)字代理商做得令人驚奇的事情之一就是Superformula,該公司最近與MGM Resorts合作闷叉,對(duì)其移動(dòng)應(yīng)用程序進(jìn)行了重大更新擦俐,并已在Flutter中對(duì)其進(jìn)行了完全重建。他們報(bào)告說(shuō):“將Flutter添加到核心產(chǎn)品中握侧,可以釋放出更高的速度和靈活性蚯瞧,這對(duì)于客戶及其用戶而言,都可以轉(zhuǎn)化為真實(shí)可衡量的價(jià)值品擎÷窈希”
Superformula與MGM Resorts設(shè)計(jì)團(tuán)隊(duì)合作,為所有主要的網(wǎng)絡(luò)萄传,移動(dòng)和信息亭體驗(yàn)創(chuàng)建了一種新的MGM設(shè)計(jì)語(yǔ)言甚颂。通過(guò)較小的團(tuán)隊(duì)和全新的Flutter代碼庫(kù),他們能夠比以前更快地重建應(yīng)用并交付到兩個(gè)應(yīng)用商店,從而使MGM的預(yù)訂轉(zhuǎn)換率提高了9%振诬。
重大變化
與往常一樣瓣铣,每個(gè)新版本的Flutter中盡量減少重大更改的數(shù)量,這些是此版本中的重大更改贷揽。
#42100 使用pushReplacement(…時(shí),運(yùn)行先前路線的輔助動(dòng)畫(huà)
#45940棄用UpdateLiveRegionEvent
#49389延遲快速滾動(dòng)時(shí)的圖像解碼
#49391文本選擇溢出(Android)
#49771 未為空畫(huà)筆設(shè)置斷言緩存提示
#50318 實(shí)時(shí)圖像緩存
#50354 使用支桿盒高度計(jì)算選擇矩形梦碗,以確保它們保持在可見(jiàn)范圍內(nèi)
#50733在gen_l10n中生成消息查找
# 51435從RouteSettings移除isinitialroute
#52781將mouse_tracking.dart移至渲染