原文鏈接:https://medium.com/flutter/announcing-flutter-1-20-2aaf68c89c75
谷歌對(duì) Flutter 的定位是提供一個(gè)便捷的工具包,從而在任何設(shè)備上得到出色的繪制體驗(yàn),所以對(duì)于每個(gè) release 版本亿胸,將會(huì)努力確保 Flutter 能快速虚吟,美觀,高效和開(kāi)放地支持每個(gè)平臺(tái),而在今天發(fā)布到 release 分支的 1.20 版本中,主要也是關(guān)于以上這四個(gè)方面的改進(jìn)。
在快速這個(gè)類別中轮锥,從底層級(jí)別的渲染引擎到 Dart 語(yǔ)言本身,本次我們都實(shí)現(xiàn)了多項(xiàng)性能改進(jìn)浮禾。
為了使開(kāi)發(fā)者能夠構(gòu)建更加精美的 Flutter 應(yīng)用程序交胚,1.20 版本提供了多項(xiàng) UI 增強(qiáng)功能,包括期待已久的:
-
autofill
支持; - 對(duì)
Widget
進(jìn)行分層以支持平移和縮放的新方式; - 新的鼠標(biāo)光標(biāo)支持;
- 對(duì)舊版本的
Material Widget
(例如時(shí)間和日期選擇器)盈电,以及 desktop 和 mobile 上 Flutter 應(yīng)用中 About box 的全新響應(yīng)式 license 頁(yè)面的更新蝴簇。
為了繼續(xù)提高 Flutter 的工作效率,我們對(duì) Visual Studio Code
的 Flutter 擴(kuò)展進(jìn)行了更新匆帚,該擴(kuò)展將 Dart DevTools
直接帶入的 IDE 中熬词,在移動(dòng)文件時(shí)會(huì)自動(dòng)更新了導(dǎo)入語(yǔ)句,并提供了一組新的元數(shù)據(jù)用于構(gòu)建自己的工具吸重。
由于 Flutter 的開(kāi)放性和出色的社區(qū)貢獻(xiàn)者互拾,本 stable 版包含來(lái)自全球 359
個(gè)貢獻(xiàn)者的 3,029
個(gè)合并 PR 和 5,485
個(gè) closed issues,其中包括來(lái)自 Flutter 社區(qū)的 270
個(gè)貢獻(xiàn)者嚎幸。
實(shí)際上颜矿,這是 Flutter release 版本中包含的最多社區(qū)貢獻(xiàn),特別是向這些社區(qū)貢獻(xiàn)者表示感謝:
- CareF 的 28個(gè) PR嫉晶;
- AyushBherwani1998 的 26個(gè)PR(包括 10 個(gè) Flutter samples 作為他的 Google Summer of Code 項(xiàng)目的一部分)骑疆;
- a14n 的 13個(gè)PR(其中許多用于為 Flutter 的 landing null safety)
如果沒(méi)有廣泛的社區(qū)貢獻(xiàn)者團(tuán)隊(duì)田篇,我們將無(wú)法持續(xù)發(fā)布 Flutter,所以非常感謝大家的支持箍铭!
Flutter 的每個(gè)新版本都會(huì)帶來(lái)了更多使用的動(dòng)力泊柬,實(shí)際上在 4月就有報(bào)道過(guò) Google Play 商店中的 Flutter 應(yīng)用程序數(shù)量已達(dá)到 50,000
,每月峰值新應(yīng)用程序數(shù)量為 10,000
诈火。
現(xiàn)在兽赁,僅三個(gè)月后,Google Play 中就已經(jīng)有超過(guò) 90,000
個(gè)Flutter應(yīng)用冷守,我們?cè)谟《瓤吹搅撕芏噙@種增長(zhǎng)刀崖,現(xiàn)在印度是 Flutter 開(kāi)發(fā)人員的第一大區(qū)域,在過(guò)去六個(gè)月中翻了一番拍摇,這與Google 在該地區(qū)增加的投資相吻合蒲跨。最后 Flutter 不能沒(méi)有 Dart ,因此很高興看到 IEEE 報(bào)告說(shuō) Dart 自去年以來(lái)已經(jīng)上升了 4 個(gè)排位授翻,在他們跟蹤的前 50 種語(yǔ)言中排名第 12。
Flutter 和 Dart 的性能改進(jìn)
在 Flutter 團(tuán)隊(duì)中孙咪,我們一直在尋找減少應(yīng)用程序大小和延遲的新方法堪唐。以上一個(gè)版本為示例,此版本修復(fù)了 icon font tree shaking 時(shí)的工具性能問(wèn)題翎蹈,并在構(gòu)建非 Web 應(yīng)用程序時(shí)font tree shaking 為默認(rèn)行為淮菠。
icon font tree shaking 會(huì)刪除未在應(yīng)用程序中使用的圖標(biāo),從而減小尺寸荤堪。將其用于Flutter Gallery 應(yīng)用程序時(shí)合陵,我們發(fā)現(xiàn)它使應(yīng)用程序大小減少了100kb。現(xiàn)在澄阳,在進(jìn)行 release 版本構(gòu)建時(shí)拥知,默認(rèn)情況下在移動(dòng)應(yīng)用程序中會(huì)出現(xiàn)這個(gè)行為,目前僅限 TrueType
字體碎赢,但在將來(lái)的版本中將取消該限制低剔。
我們?cè)诖税姹局羞M(jìn)行的另一項(xiàng)性能改進(jìn)是使用預(yù)熱階段來(lái)減少動(dòng)畫初始顯示中的鋸齒,可以在此動(dòng)畫中看到一個(gè)改進(jìn)的示例(降低到一半速度)肮塞。
如果 Flutter 應(yīng)用程序在首次運(yùn)行期間出現(xiàn)了不穩(wěn)定的動(dòng)畫襟齿,則 Skia Shading Language 著色器將在應(yīng)用程序構(gòu)建過(guò)程中提供預(yù)編譯功能,從而可以使其速度提高 2 倍以上枕赵。如果想利用此高級(jí)功能猜欺,請(qǐng)參見(jiàn) flutter.dev 上的 SkSL 預(yù)熱頁(yè)面。
最后拷窜,當(dāng)我們針對(duì) desktop 進(jìn)行優(yōu)化時(shí)开皿,我們將繼續(xù)完善對(duì)鼠標(biāo)的支持涧黄。在此版本中,我們重構(gòu)了鼠標(biāo)點(diǎn)擊測(cè)試系統(tǒng)副瀑,以提供由于性能問(wèn)題而被阻止的許多體系結(jié)構(gòu)優(yōu)勢(shì)弓熏,重構(gòu)使我們能夠在基于 Web 的微基準(zhǔn)測(cè)試中將性能提高多達(dá) 15
倍!這意味著開(kāi)發(fā)者將獲得更好糠睡,更一致挽鞠,更準(zhǔn)確的命中測(cè)試,而無(wú)需放棄性能:雙贏狈孔!
通過(guò)這種更好信认,更快,更強(qiáng)大的鼠標(biāo)命中測(cè)試均抽,我們?cè)黾恿藢?duì)鼠標(biāo)光標(biāo)的支持嫁赏,這是 desktop 最受歡迎的功能之一。默認(rèn)情況下油挥,幾個(gè)常用的小部件將顯示開(kāi)發(fā)者期望的光標(biāo)潦蝇,或者開(kāi)發(fā)者可以從受支持的光標(biāo)列表中指定另一個(gè)。
此版本的 Flutter 基于 2.9 版本的 Dart 構(gòu)建的深寥,它具有一個(gè)新的基于狀態(tài)的 two-pas UTF-8
解碼器攘乒,該解碼器具有在 Dart VM 中優(yōu)化的解碼原語(yǔ),部分利用了 SIMD
指令惋鹅。UTF-8是迄今為止互聯(lián)網(wǎng)上使用最廣泛的字符編碼方法则酝,當(dāng)收到較大的網(wǎng)絡(luò)響應(yīng)時(shí),能夠快速對(duì)其進(jìn)行解碼至關(guān)重要闰集。在我們的UTF-8解碼基準(zhǔn)測(cè)試中沽讹,我們發(fā)現(xiàn),在低端ARM設(shè)備上武鲁,英語(yǔ)文本的全面改進(jìn)從近200%提高到中文文本的400%爽雄。
自動(dòng)填充移動(dòng)文本字段
一段時(shí)間以來(lái),最受用戶歡迎的功能之一是為 Flutter 程序中對(duì)文本自動(dòng)填充在 Android 和 iOS提供支持洞坑。使用 PR 52126盲链,我們很高興地說(shuō)等待已經(jīng)結(jié)束:不再要求用戶重新輸入,操作系統(tǒng)已為他們收集的數(shù)據(jù)迟杂。
另外你會(huì)很高興聽(tīng)到我們也已經(jīng)開(kāi)始為 Web 添加此功能刽沾。
一個(gè)用于常見(jiàn)交互模式的新控件
此版本引入了一個(gè)新的小部件 InteractiveViewer
。該 InteractiveViewer
設(shè)計(jì)用于建設(shè)普通類型的交互性到應(yīng)用程序排拷,如: 平移侧漓,縮放和拖動(dòng)“N”下降甚至大小調(diào)整,其中類似這種簡(jiǎn)單的棋盤监氢。
要查看如何將集成 InteractiveViewer
到自己的應(yīng)用程序中布蔗,請(qǐng)查看API文檔藤违,你可以在 DartPad 中使用它。另外纵揍,如果你想了解的 InteractiveViewer
設(shè)計(jì)和開(kāi)發(fā)方法顿乒,則可以在YouTube 上看到 Chicago Flutter on YouTube.的演講。
如果你有興趣向 InteractiveViewer
啟用的 Flutter 應(yīng)用程序中添加新的交互泽谨,那么你可能也會(huì)很高興聽(tīng)到我們?cè)诖税姹局刑砑恿烁喙δ軄?lái)拖動(dòng)“n”璧榄。具體來(lái)說(shuō),如果你想準(zhǔn)確知道目標(biāo)控件上的放置發(fā)生在哪里(Draggable對(duì)象本身始終可以使用它)吧雹,現(xiàn)在可以使用 DragTarget onAcceptDetails
方法獲取該信息骨杂。
請(qǐng)查看此樣本以獲取詳細(xì)信息,并期待將來(lái)的發(fā)行版雄卷,該發(fā)行版還將在拖動(dòng)期間提供此信息搓蚪,以便DragTarget
可以在拖動(dòng)操作期間更輕松地提供視覺(jué)更新。
更新了 Material Slider丁鹉,RangeSlider妒潭,TimePicker 和 DatePicker
除了新的控件之外,此版本還包含許多更新的控件揣钦,包括 Slider
和 RangeSlider
杜耙。有關(guān)更多信息,請(qǐng)參見(jiàn) Slider
控件的新增功能拂盯。
DatePicker
已更新,包括新的緊湊型設(shè)計(jì)以及對(duì)日期范圍的支持记靡。
最后谈竿,TimePicker它具有全新的風(fēng)格。
如果您想使用它摸吠,這是一個(gè)使用 Flutter構(gòu)建的有趣的 Web 演示空凸。
Responsive Licenses page
此版本的另一個(gè)更新是可以從中獲得新的 esponsive licenses page: AboutDialog
。
來(lái)自社區(qū)貢獻(xiàn)者 TonicArtos 的 PR 57588 不僅進(jìn)行了更新寸痢,以符合 Material 準(zhǔn)則呀洲,使其看起來(lái)非常美觀,而且更易于瀏覽啼止,并設(shè)計(jì)為可在平板電腦和臺(tái)式機(jī)上以及在手機(jī)上正常使用道逗。謝謝 TonicArtos!由于每個(gè) Flutter 應(yīng)用程序都應(yīng)顯示其使用的軟件包的許可證献烦,因此使每個(gè) Flutter 應(yīng)用程序都變得更好了滓窍。
發(fā)布插件需要新的 pubspec.yaml 格式
當(dāng)然,F(xiàn)lutter不僅是控件巩那,它也是工具吏夯,此版本附帶太多更新此蜈,但是,這里有一些亮點(diǎn)噪生。
首先裆赵,是一項(xiàng)公共服務(wù)公告:如果您是 Flutter 插件的作者,那么 pubspec.yaml
發(fā)布插件將不再支持舊格式跺嗽。如果嘗試執(zhí)行 pub publish
時(shí)會(huì)收到以下錯(cuò)誤消息:
舊格式不支持指定插件支持的平臺(tái)战授,并且自 Flutter 1.12 起已棄用。現(xiàn)在抛蚁,發(fā)布新的或更新的插件需要新的 pubspec.yaml
格式陈醒。
對(duì)于插件客戶而言,這些工具仍然可以理解舊的 pubspec
格式瞧甩,在未來(lái)一段時(shí)間內(nèi) pub.dev
上所有使用舊格式的現(xiàn)有插件將繼續(xù)與Flutter應(yīng)用程序配合使用钉跷。
在Visual Studio Code 中預(yù)覽嵌入式 Dart DevTools
此版本中最大的工具更新是 Visual Studio Code 擴(kuò)展,它提供了一項(xiàng)新功能的預(yù)覽肚逸,使得開(kāi)發(fā)者能夠?qū)?Dart DevTools 屏幕直接帶入編碼工作區(qū)爷辙。
使用新的 dart.previewEmbeddedDevTools
設(shè)置啟用此功能,上面的屏幕截圖顯示了直接嵌入到 Visual Studio Code 中的 Flutter Widget Inspector 朦促,啟用了此新設(shè)置膝晾,你可以使用狀態(tài)欄上 的Dart DevTools 菜單選擇嵌入的收藏頁(yè)面。
此菜單允許您選擇要顯示的頁(yè)面务冕。
該功能仍處于預(yù)覽狀態(tài)血当,因此,如果您有任何問(wèn)題禀忆,請(qǐng)告訴我們臊旭。(https://github.com/Dart-Code/Dart-Code/issues)
網(wǎng)絡(luò)跟蹤更新
Dart DevTools 的最新版本隨附“網(wǎng)絡(luò)”頁(yè)面的更新版本,可啟用 Web 套接字分析箩退。
現(xiàn)在离熏,“Network” 頁(yè)面會(huì)將計(jì)時(shí)信息以及你的狀態(tài)和內(nèi)容類型等其他信息添加到應(yīng)用中的 network calls 中。對(duì)詳細(xì)信息UI進(jìn)行了其他改進(jìn)戴涝,以提供 websocket 或 http 請(qǐng)求中數(shù)據(jù)的概述滋戳。我們還為該頁(yè)面提供了更多計(jì)劃,包括 HTTP請(qǐng)求/響應(yīng)主體和監(jiān)視 gRPC 流量啥刻。
Updating import statements on file rename
Visual Studio Code 的另一個(gè)新功能是在重命名時(shí)更新導(dǎo)入奸鸯,當(dāng)文件被移動(dòng)或重命名時(shí),它會(huì)自動(dòng)更新導(dǎo)入語(yǔ)句可帽。
該功能目前僅適用于單個(gè)文件府喳,不適用于多個(gè)文件或文件夾,但即將推出該功能蘑拯。
Tooling metadata for every tool builder
還要提到的另一項(xiàng)更新是針對(duì)構(gòu)建 Flutter 工具的人員钝满,我們?cè)?GitHub 上創(chuàng)建了一個(gè)新項(xiàng)目兜粘,以捕獲和發(fā)布有關(guān) Flutter 框架本身的元數(shù)據(jù),它提供以下內(nèi)容的機(jī)器可讀數(shù)據(jù)文件:
- 當(dāng)前所有Flutter小部件的目錄(395個(gè)小部件);
- Material 和 Cupertino 顏色集的 Flutter 框架[顏色名稱到顏色值的映射];(https://github.com/flutter/tools_metadata/tree/master/resources/colors)
- Material和Cupertino圖標(biāo)的圖標(biāo)元數(shù)據(jù)弯蚜,包括圖標(biāo)名稱和預(yù)覽圖標(biāo);
這與我們自己用于 Android Studio / IntelliJ 和 VS Code 擴(kuò)展的元數(shù)據(jù)相同孔轴;我們認(rèn)為這在構(gòu)建自己的工具時(shí)可能會(huì)覺(jué)得有用。實(shí)際上碎捺,此元數(shù)據(jù)使 IntelliJ IDE 系列的功能可以顯示Flutter代碼中使用的顏色:
與此相關(guān)的是IntelliJ和Android Studio中的一項(xiàng)新功能路鹰,該功能顯示 Color.fromARGB()
和Color.fromRGBO()
的色塊:
特別感謝 GitHub 上的 dratushnyy 為 IntelliJ 中的顏色預(yù)覽做出了貢獻(xiàn)!
Typesafe platform channels for platform interop
為了響應(yīng)用戶調(diào)查中插件作者的普遍需求收厨,最近我們一直在嘗試如何使 Flutter 與主機(jī)平臺(tái)之間的通信對(duì)于插件和 Add-to-App 更安全更輕松晋柱。為了滿足這一需求爷绘,我們創(chuàng)建了 Pigeon
這個(gè)命令行工具速兔,該工具使用 Dart 語(yǔ)法在平臺(tái)通道頂部生成類型安全的消息傳遞代碼,而無(wú)需添加其他運(yùn)行時(shí)依賴項(xiàng)漾抬。
使用Pigeon拧额,你可以在直接調(diào)用 Dart 方法的情況下調(diào)用 Java / Objective-C / Kotlin / Swift 類方法并傳遞非基本數(shù)據(jù)對(duì)象碑诉,而無(wú)需在平臺(tái)通道上手動(dòng)匹配方法字符串和序列化參數(shù)。
雖然仍然處于預(yù)發(fā)行階段侥锦,但是 Pigeon 已經(jīng)變得足夠成熟进栽,因此我們可以在 video_player 插件中使用它。如果您想對(duì) Pigeon 進(jìn)行測(cè)試以供自己使用恭垦,請(qǐng)參閱更新的平臺(tái)渠道文檔以及該示例項(xiàng)目快毛。
無(wú)法列出太多工具更新
Flutter 1.20 時(shí)間表中的工具發(fā)生了太多重大變化,因此我們無(wú)法在此處列出所有內(nèi)容番挺。但是祸泪,您可能希望自己查看更新公告:
- VS Code擴(kuò)展v3.13
- VS Code擴(kuò)展v3.12
- VS Code擴(kuò)展v3.11
- Flutter IntelliJ插件M46發(fā)布
- Flutter IntelliJ插件M47發(fā)布
- Flutter IntelliJ插件M48發(fā)布
- Flutter內(nèi)置的面向Flutter開(kāi)發(fā)人員的新工具
重大變化
與以往一樣,我們?cè)噲D將重大更改的數(shù)量保持在較低水平建芙。以下是Flutter 1.20版本中的列表。
-
#55336 Adding
tabSemanticsLabel
toCupertinoLocalizations
- 遷移指南PR -
#55977 Add
clipBehavior
to widgets withclipRect
- #55998 Fixes the navigator pages update crashes when there is still route.
- #56582 Update Tab semantics in Cupertino to be the same as Material
- #57065 Remove deprecated child parameter for NestedScrollView’s overlap managing slivers
- #58392 iOS mid-drag activity indicator
Summary
希望你和我們一樣對(duì)這個(gè)版本感到興奮懂扼,從許多角度來(lái)看禁荸,這是 Flutter 迄今為止最大的發(fā)行版。隨著性能的提高阀湿,新的和更新的小部件以及工具的改進(jìn)赶熟,我們只能做到更突出。我們要感謝社區(qū)貢獻(xiàn)者的數(shù)量不斷增長(zhǎng)陷嘴,而且不斷壯大映砖,使每個(gè) Flutter 版本都可以比以前的版本更大,更快灾挨,更強(qiáng)大邑退。還有更多的功能竹宋,包括對(duì)空安全性的支持,新版本的 Ads
地技,Maps
和 WebView
插件蜈七,以及正在進(jìn)行的更多工具支持。