原文鏈接: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?,F(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)畫(huà)初始顯示中的鋸齒,可以在此動(dòng)畫(huà)中看到一個(gè)改進(jìn)的示例(降低到一半速度)。
如果 Flutter 應(yīng)用程序在首次運(yùn)行期間出現(xiàn)了不穩(wěn)定的動(dòng)畫(huà),則 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 起已棄用?,F(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
tabSemanticsLabeltoCupertinoLocalizations- 遷移指南PR -
#55977 Add
clipBehaviorto 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)行的更多工具支持。