【譯】Flutter 1.20 發(fā)布

原文鏈接: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è)合并 PR5,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)的示例(降低到一半速度)。

不用和有SkSL預(yù)熱的動(dòng)畫(huà)

如果 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è)。


Android上現(xiàn)有小部件上的新鼠標(biāo)光標(biāo)

此版本的 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ù)。

自動(dòng)填充

另外你會(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)單的棋盤。

image

要查看如何將集成 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 方法獲取該信息。

image

請(qǐng)查看此樣本以獲取詳細(xì)信息,并期待將來(lái)的發(fā)行版,該發(fā)行版還將在拖動(dòng)期間提供此信息,以便DragTarget 可以在拖動(dòng)操作期間更輕松地提供視覺(jué)更新。

更新了 Material Slider,RangeSlider,TimePicker 和 DatePicker

除了新的控件之外,此版本還包含許多更新的控件,包括 SliderRangeSlider。有關(guān)更多信息,請(qǐng)參見(jiàn) Slider 控件的新增功能。

image

image

DatePicker 已更新,包括新的緊湊型設(shè)計(jì)以及對(duì)日期范圍的支持。

image

最后,TimePicker它具有全新的風(fēng)格。

image

如果您想使用它,這是一個(gè)使用 Flutter構(gòu)建的有趣的 Web 演示。

Responsive Licenses page

此版本的另一個(gè)更新是可以從中獲得新的 esponsive licenses page: AboutDialog

image

來(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ò)誤消息:

image

舊格式不支持指定插件支持的平臺(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ū)。

image

使用新的 dart.previewEmbeddedDevTools 設(shè)置啟用此功能,上面的屏幕截圖顯示了直接嵌入到 Visual Studio Code 中的 Flutter Widget Inspector ,啟用了此新設(shè)置,你可以使用狀態(tài)欄上 的Dart DevTools 菜單選擇嵌入的收藏頁(yè)面。

image

此菜單允許您選擇要顯示的頁(yè)面。

image

該功能仍處于預(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 套接字分析。

image

現(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ǔ)句。

image

該功能目前僅適用于單個(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ù)文件:

這與我們自己用于 Android Studio / IntelliJ 和 VS Code 擴(kuò)展的元數(shù)據(jù)相同;我們認(rèn)為這在構(gòu)建自己的工具時(shí)可能會(huì)覺(jué)得有用。實(shí)際上,此元數(shù)據(jù)使 IntelliJ IDE 系列的功能可以顯示Flutter代碼中使用的顏色:

image

與此相關(guān)的是IntelliJ和Android Studio中的一項(xiàng)新功能,該功能顯示 Color.fromARGB()Color.fromRGBO()的色塊:

image

特別感謝 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ù)。

image

雖然仍然處于預(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)容。但是,您可能希望自己查看更新公告:

重大變化

與以往一樣,我們?cè)噲D將重大更改的數(shù)量保持在較低水平。以下是Flutter 1.20版本中的列表。

  • #55336 Adding tabSemanticsLabel to CupertinoLocalizations - 遷移指南PR
  • #55977 Add clipBehavior to widgets with clipRect
  • #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,MapsWebView 插件,以及正在進(jìn)行的更多工具支持。

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

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