[Flutter翻译]宣布 Flutter 1.20

6,699 阅读14分钟

副标题:性能改进,移动自动填充,一个新的widget和更多的东西

原文地址:medium.com/flutter/ann…

原文作者:medium.com/@csells_180…

发布时间:2020年8月5日-11分钟阅读

我们对Flutter的持续愿景是提供一个便携式工具包,用于构建令人惊叹的体验,无论您在哪里都可以在屏幕上绘制像素。每一次发布,我们都会继续努力,确保Flutter对我们支持的每个平台都是快速、美观、高效和开放的。在今天发布到我们稳定频道的Flutter 1.20中,Flutter对这四大支柱中的每一个都有改进。

的范畴,我们从渲染引擎的最低层和Dart语言本身,都有多项性能改进。

为了让您能够构建出越来越漂亮的Flutter应用,这个版本有几个UI增强功能,包括期待已久的对自动填充的支持,一种新的方式来分层您的部件以支持平移和缩放,新的鼠标光标支持,对旧的最爱的Material部件(如时间和日期选择器)的更新,以及一个全新的响应式许可页面,用于您的桌面和移动形式因素Flutter应用中的关于框。

为了确保你继续提高工作效率,我们对Visual Studio Code的Flutter扩展进行了更新,将Dart DevTools直接带入你的IDE中,在你移动文件时自动更新你的导入语句,并为构建你自己的工具提供了一套新的元数据。

而正是因为Flutter的开放性和惊人的社区贡献者,这个版本包含了来自全球359位贡献者的3029个合并PR和5485个已关闭的问题,其中包括270位来自广大Flutter社区的贡献者。事实上,这标志着我们有史以来对Flutter版本的最大贡献者数量。特别鸣谢社区贡献者CareF的28个PR,AyushBherwani1998的26个PR,包括10个作为他的Google Summer of Code项目的一部分对Flutter样本的贡献,以及a14n的13个PR,其中许多是为Flutter的落地空安全服务的(更多的主题很快就会出现!)。如果没有广大的社区贡献者团队,我们无法创建Flutter,所以谢谢你们!

Flutter的每一个新版本都会带来使用量的增加和动力。事实上,在4月份,我们报告说,Google Play商店中的Flutter应用数量已经达到了5万个,峰值速度为1万个新应用/月。现在,仅仅三个多月后,Google Play中的Flutter应用已经超过9万个。我们在印度看到了很多这样的增长,印度现在是Flutter开发者的第一大地区,在过去的六个月里翻了一番,这与谷歌加大对该地区的投资非常一致。最后,没有Dart的Flutter就不是Flutter,所以很高兴看到IEEE报告说Dart自去年以来已经上升了4位,在他们追踪的前50种语言中排名第12

Flutter和Dart的性能改进

在Flutter团队中,我们一直在寻找新的方法来降低你的应用程序的大小和延迟。作为前者的一个例子,这个版本修复了图标字体剪枝的工具性能问题,并使字体剪枝成为构建您的非网络应用时的默认行为。图标字体剪枝会移除你的应用中不使用的图标,从而减小尺寸。针对Flutter Gallery应用使用这个功能,我们发现它将应用大小减少了100kb。现在,当你在进行发布构建时,你的移动应用中默认会有这种行为。目前它仅限于TrueType Fonts,但这一限制将在未来的版本中被取消。 我们在这个版本中做的另一项性能改进是使用预热阶段减少了动画初始显示时的抖动。你可以在这个动画中看到一个改善抖动的例子(放慢到一半速度)。

无SkSL热身和有SkSL热身的动画

如果一个Flutter应用在第一次运行时有卡顿的动画,Skia Shading Language着色语言着色器提供了预编译作为你的应用构建的一部分,可以加快2倍以上的速度。如果你想利用这个高级功能,请看flutter.dev上的SkSL预热页面

最后,在我们针对桌面形式因素进行优化的同时,我们继续完善我们的鼠标支持。在这个版本中,我们重构了鼠标命中测试系统,提供了许多由于性能问题而受阻的架构优势。重构使我们在基于Web的微基准中的性能提高了15倍之多! 这对您来说意味着,您可以在不放弃性能的前提下,获得更好、更一致、更准确的测试结果:双赢!

有了这个更好、更快、更强的鼠标命中测试,我们增加了对鼠标光标的支持--这也是最受好评的桌面功能之一。一些常用的widget将默认显示你所期望的光标,或者你可以从支持的光标列表中指定另一个。

在Android上现有的widget上添加新的鼠标指针。

Flutter的这个版本是建立在Dart的2.9版本上的。它的特点是采用了新的基于状态的双通UTF-8解码器,解码基元在Dart虚拟机中进行了优化,部分利用了SIMD指令。UTF-8是目前互联网上使用最广泛的字符编码方法,在接收大型网络响应时,能够快速解码是至关重要的。在我们的UTF-8解码基准测试中,我们看到在低端ARM设备上,从英文文本的近200%到中文文本的400%,都得到了全面的改进。

移动文本字段的自动填充

一段时间以来,最要求的Flutter功能之一就是支持底层的Android和iOS支持Flutter程序中的文本自动填充。随着PR 52126,我们很高兴地说,等待已经结束了--不用再要求你的用户重新输入操作系统已经为他们收集的数据。

自动填写的行动

你会很高兴地听到,我们已经开始为网络添加这一功能。

一个新的widget,用于常见的交互模式

这个版本引入了一个新的widget--InteractiveViewer,它是为了在您的应用程序中构建常见的交互性而设计的,比如平移、缩放和拖放,即使在调整大小的情况下也是如此。InteractiveViewer 是为在你的应用程序中构建常见的交互性而设计的,比如平移、缩放、拖放,甚至在调整大小的情况下也是如此,这个简单的围棋棋盘示例演示了这一点。

使用交互式查看器进行缩放、平移、调整大小、拖放等操作。

要想知道如何将InteractiveViewer集成到自己的应用中,请查看API文档,在那里你可以在DartPad中玩它。另外,如果你想了解InteractiveViewer是如何设计和开发的,你可以在YouTube上看到作者为芝加哥Flutter做的演示。 如果你有兴趣在你的Flutter应用中加入InteractiveViewer所实现的那种交互性,那么你可能也会很高兴地听到我们在这个版本中增加了更多的拖放功能。具体来说,如果你想知道目标widget上发生的精确下落位置(它一直对Draggable对象本身可用),现在你可以通过DragTarget onAcceptDetails方法获得该信息。

新的拖动目标接受细节的行动

查看此示例以了解细节,并期待未来的版本能够在拖动过程中也提供这些信息,以便DragTarget能够更容易地在拖动操作中提供视觉更新。

更新了材质滑块、范围滑块、时间选择器和日期选择器。

除了新的widget,这个版本还包括一些更新的widget,以符合最新的Material准则。其中包括SliderRangeSlider。更多信息,请看 Slider widget 的新功能

更新的材料滑块

更新材料范围滑块

DatePicker 已经更新,加入了新的紧凑设计以及对日期范围的支持。

更新的DatePicker

最后,TimePicker有了全新的风格。

更新的TimePicker

如果你想玩一玩,这里有一个用Flutter搭建的有趣的网页演示

响应式许可证页面

这次发布的另一个更新是在AboutDialog中提供了新的响应式许可证页面。

新许可证页面

来自社区贡献者TonicArtosPR 57588,不仅更新为符合Material指南,让它看起来更漂亮,而且它更容易导航,并设计为在平板电脑和桌面上与手机一样好用。谢谢,TonicArtos! 因为每一个Flutter应用都应该显示他们使用的包的许可证,你只是让每一个Flutter应用变得更好!

发布插件需要新的pubspec.yaml格式。

当然,Flutter不仅仅是widget,还有工具,这个版本的更新太多,无法一一提及。不过,这里有一些亮点。 首先是一个公开服务声明:如果你是Flutter插件作者,那么传统的pubspec.yaml格式不再支持发布插件。如果你尝试了,在执行pub publish时,你会得到以下错误信息:

插件发布时遗留的pubspec格式错误信息。

旧的格式不支持指定你的插件支持的平台,并且从Flutter 1.12开始就被废弃了。现在发布新的或更新的插件需要使用新的pubspec.yaml格式

对于插件的客户端,工具仍然理解旧的pubspec格式,并且在可预见的未来也会理解。pub.dev上所有使用传统pubspec.yaml格式的现有插件在可预见的未来将继续与Flutter应用程序一起工作。

在Visual Studio Code中预览嵌入式Dart DevTools。

这个版本中最大的工具更新来自于Visual Studio Code扩展,它提供了一个新功能的预览,使你能够将Dart DevTools屏幕直接带入你的编码工作区。

嵌入到Visual Studio代码中的Dart DevTools布局浏览器的预览。

使用新的dart.previewEmbeddedDevTools设置启用此功能。上面的截图显示了Flutter Widget Inspector直接嵌入到Visual Studio Code中,但是启用了这个新的设置,你可以使用状态栏上的Dart DevTools菜单选择你最喜欢的页面嵌入。

这个菜单可以让你选择要显示的页面。

这个功能还在预览中,如果你有任何问题,请告诉我们

网络跟踪的更新

最新版本的Dart DevTools附带了一个更新版本的网络页面,可以实现网络套接字剖析。

Dart DevTools的网络页面上的套接字连接的时间、状态和内容类型。

网络页面现在为您的应用程序的网络呼叫添加了定时信息,以及状态和内容类型等其他信息。我们还对详细信息UI进行了额外的改进,以提供websocket或http请求中数据的概述。我们还为这个页面制定了更多的计划,包括HTTP请求/响应体和监控gRPC流量。

更新文件重命名的导入语句

Visual Studio Code的另一个新功能是在重命名时更新导入,当文件被移动或重命名时,它会自动更新导入语句。

在Visual Studio代码中移动Dart文件,更新导入语句。

该功能目前只适用于单个文件,而不是多个文件或文件夹,但该支持即将到来。

为每个工具制作者提供工具元数据。

还有一个需要提及的更新是针对构建Flutter工具的人。我们在GitHub上创建了一个新的项目来捕获和发布关于Flutter框架本身的元数据。它为以下内容提供了机器可读的数据文件。

这与我们自己在Android Studio / IntelliJ和VS Code扩展中使用的元数据相同;我们认为在构建自己的工具时,你可能会发现它很有用。事实上,这个元数据使IntelliJ系列IDE中的功能能够显示你的Flutter代码中使用的颜色。

与此相关的是IntelliJ和Android Studio中的一个新功能,可以显示Color.fromARGB()和Color.fromRGBO()的色块。

特别感谢GitHub上的dratushnyy对IntelliJ中的颜色预览的改进贡献了自己的力量!

平台互操作的Typesafe平台通道

为了响应插件作者在用户调查中的普遍需求,最近我们一直在尝试如何让Flutter和主机平台之间的通信更安全,更方便插件Add-to-App。为了满足这一需求,我们创建了Pigeon,这是一个命令行工具,它使用Dart语法在平台通道之上生成类型安全的消息代码,而无需添加额外的运行时依赖。有了Pigeon,你无需在平台通道上手动匹配方法字符串并序列化参数,而是可以调用Java/Objective-C/Kotlin/Swift类方法,并通过直接调用Dart方法传递非原生数据对象(反之亦然)。

虽然还在预发布阶段,但Pigeon已经足够成熟,我们自己也在video_player插件中使用它。如果你有兴趣在自己的使用中测试Pigeon,请看更新的platform channel文档以及这个示例项目

工具更新太多,无法一一列举

在Flutter 1.20的时间框架内发生了这么多伟大的事情,我们不能在这里列出所有的工具。然而,你可能想看看更新公告本身:

突破性变化

和以往一样,我们尽量保持较低的中断修改数量。以下是Flutter 1.20版本的列表:

概要

希望你和我们一样,对这个版本感到兴奋。从很多角度来看,这是Flutter最大的版本。随着性能的提高,新的和更新的小部件,以及工具的改进,我们只能击中亮点。我们要感谢您,强大的和不断增长的社区贡献者,使每一个Flutter版本都比之前的版本更大、更快、更强。还有更多的内容,对null安全的支持,新版本的Ads、Maps和WebView插件,以及更多的工具支持正在进行中。(事实上,你可能会对Bob Nystrom关于理解null安全的深入研究感兴趣)。

有了Flutter和工具中所有这些额外的力量,你打算构建什么?


通过( www.DeepL.com/Translator )(免费版)翻译