原文地址:https://medium.com/flutter/an...html
咱们对Flutter的持续愿景是提供一个便携式工具箱,用于构建使人惊叹的体验,不管您在哪里均可以在屏幕上画出像素。每一次发布,咱们都会继续努力,确保Flutter对咱们支持的每一个平台都是快速、美观、高效和开放的。在今天发布到咱们稳定频道的Flutter 1.20中,Flutter对这四大支柱中的每个都有改进。git
在快的类别中,咱们从渲染引擎的最底层和Dart语言自己,都有多项性能改进。github
为了使您可以构建更加美丽的Flutter应用程序,这个版本有几个UI加强功能,包括期待已久的自动填充支持,一种新的方式来分层您的组件以支持平移和缩放,新的鼠标光标支持,更新旧的最喜欢的Material组件(如时间和日期选择器/),以及一个全新的响应式许可页面,用于桌面和移动形式因素Flutter应用程序中的关于框。web
为了确保你继续保持更高的生产力,咱们已经更新了Visual Studio Code的Flutter扩展,它将Dart DevTools直接带入你的IDE中,当你移动你的文件时自动更新你的导入语句,以及一套新的元数据用于构建你本身的工具。spring
而正是由于Flutter的_开放性和惊人的社区贡献者,这个版本包含了来自世界各地359位贡献者的3,029个合并PR和5,485个已关闭问题,其中包括270位来自Flutter社区的贡献者。事实上,这标志着咱们有史以来对Flutter版本的最大贡献者数量。特别鸣谢社区贡献者CareF的28个PR,AyushBherwani1998的26个PR,其中包括10个做为他的Google Summer of Code项目的一部分对Flutter样本的贡献,以及a14n的13个PR,其中许可能是为Flutter的空安全落地服务的(更多关于这个话题很快就会有!)。若是没有普遍的社区贡献者团队,咱们没法建立Flutter,因此感谢大家/!json
Flutter的每一个新版本都会带来更多的使用量和动力。事实上,在4月份,咱们报道,Google Play商店中的Flutter应用数量已经达到了5万个,峰值速度为10000个新应用/月。如今,仅仅过了三个多月,Google Play中的Flutter应用已经超过了9万个。咱们在印度看到了不少这样的增加,印度如今是Flutter开发者的第一大地区,在过去的6个月里翻了一番,这与谷歌加大对该地区的投资很是吻合。最后,没有Dart,Flutter就不是Flutter,因此很高兴看到IEEE报告说,Dart自去年以来已经上升了4位,在他们追踪的前50种语言中排名第12。api
在Flutter团队中,咱们一直在寻找新的方法来下降你的应用的大小和延迟。做为前者的一个例子,这个版本修复了图标字体树摇动的工具性能问题和使字体树摇动成为默认行为,当构建您的非Web应用程序时。图标字体树摇动会移除你的应用中不使用的图标,从而减少尺寸。对Flutter Gallery应用使用这个功能,咱们发现它将应用大小减小了100kb。如今,当你在进行发布构建时,你的移动应用中默认会有这种行为。目前它仅限于TrueType Fonts,但这一限制将在将来的版本中被取消。浏览器
咱们在这个版本中作的另外一项性能改进是使用预热阶段减小了动画初始显示时的抖动。你能够在这个动画中看到一个改善抖动的例子 (slowed down to half speed)。安全
若是一个Flutter应用在第一次运行时有卡顿的动画,Skia Shading Language shader提供了预编译做为你的应用构建的一部分,能够将其速度提升2倍以上。若是你想利用这个高级功能,请看flutter.dev上的SkSL预热页面。websocket
最后,在咱们针对桌面形式因素进行优化的同时,咱们继续完善咱们的鼠标支持。在这个版本中,咱们重构了鼠标命中测试系统,提供了许多因为性能问题而被屏蔽的架构优点。重构使咱们在基于Web的微基准中的性能提升了15倍! 这对您来讲意味着,您能够在不放弃性能的前提下,得到更好、更一致、更准确的测试结果:共赢!
有了这个更好、更快、更强的鼠标点击测试,咱们增长了对鼠标光标的支持--这也是最受好评的桌面功能之一。一些经常使用的小组件将默认显示你所指望的光标,或者你能够从支持的光标列表中指定另外一个。
在Android上现有的小组件上添加新的鼠标指针。
Flutter的这个版本是创建在Dart的2.9版本上的。它的特色是采用了新的基于状态的双通UTF-8解码器,解码基元在Dart虚拟机中进行了优化,部分利用了SIMD指令。UTF-8是目前互联网上使用最普遍的字符编码方法,在接收大型网络响应时,可以快速解码是相当重要的。在咱们的UTF-8解码基准测试中,咱们发如今低端ARM设备上,从英文文本的近200%到中文文本的400%,都获得了全面的改进。
一段时间以来,最要求的Flutter功能之一就是支持底层的Android和iOS支持Flutter程序中的文本自动填充。随着PR 52126,咱们很高兴地说,等待已经结束了--不用再要求你的用户从新输入操做系统已经为他们收集的数据。
自动填写的行动
你会很高兴地听到,咱们已经开始为网络添加这一功能。
这个版本引入了一个新的widget--"InteractiveViewer"。InteractiveViewer
是为在你的应用程序中构建常见的交互性而设计的,好比平移、缩放和拖放,甚至在调整大小的状况下也是如此,这个简单的围棋棋盘示例演示了这一点。
使用 "交互式查看器 "进行缩放、平移、调整大小、拖放等操做。
要查看如何将InteractiveViewer
集成到你本身的应用程序中,查看API文档,你能够在DartPad中玩它。另外,若是你想了解InteractiveViewer
是如何设计和开发的,你能够在YouTube上看到做者为Chicago Flutter作的演示。
若是你有兴趣在你的Flutter应用中加入InteractiveViewer
所实现的那种交互性,那么你可能也会很高兴地听到咱们在这个版本中增长了更多的拖放功能。具体来讲,若是你想知道在目标组件上发生的精确的拖放位置(它老是对_Draggable_对象自己可用),如今你能够经过_DragTarget onAcceptDetails_方法得到该信息。
新的拖动目标接受细节的行动
查看此示例以了解详情,并期待将来的版本能在拖动过程当中提供这些信息,以便_DragTarget_能更容易地在拖动操做中提供视觉更新。
除了新的widget,这个版本还包括一些更新的widget,以符合最新的材料准则。其中包括Slider
和RangeSlider
。更多信息,请参见Slider widget有什么新变化?
更新的材料滑块
更新材料范围滑块
更新了 "DatePicker",加入了新的紧凑设计以及对日期范围的支持。
更新的DatePicker
最后,TimePicker
有了全新的风格。
更新的TimePicker
若是你想玩一玩,这里有一个用Flutter搭建的有趣的网页演示。
本次发布的另外一个更新是在 "AboutDialog "中新增了响应式受权页面。
新许可证页面
PR 57588,来自社区贡献者TonicArtos,不只更新了Material指南,让它看起来更漂亮,并且它更容易导航,而且设计成在平板电脑和桌面上和手机上同样好用。谢谢,TonicArtos! 由于每一个Flutter应用都应该显示他们使用的包的许可证,你只是让每一个Flutter应用都变得更好!
固然,Flutter不只仅是小组件,还有工具,这个版本的更新太多,没法一一说起。不过,这里有一些亮点。
首先是一个公益声明:若是你是Flutter插件做者,那么传统的pubspec.yaml
格式再也不支持发布插件。若是你尝试,在执行_pub publish_时,你会获得如下错误信息。
插件发布时遗留的pubspec格式错误信息。
旧的格式不支持指定你的插件支持哪些平台,而且从Flutter 1.12开始就被废弃了。 新的pubspec.yaml格式如今须要发布新的或更新的插件。
对于插件的客户端,这些工具仍然可以理解旧的pubspec格式,而且在可预见的将来也将如此。pub.dev上全部使用传统pubspec.yaml
格式的现有插件在可预见的将来将继续与Flutter应用程序一块儿工做。
这个版本中最大的工具更新来自于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的另外一个新功能是在重命名时更新导入,当文件被移动或重命名时,它会自动更新_import_语句。
在Visual Studio代码中移动Dart文件,更新导入语句。
该功能目前只适用于单个文件,而不是多个文件或文件夹,但该支持即将到来。
还有一个须要说起的更新是针对构建Flutter工具的人。咱们在GitHub上建立了一个新的项目来捕获和发布关于Flutter框架自己的元数据。它为如下内容提供了机器可读的数据文件。
这与咱们本身在Android Studio / IntelliJ和VS Code扩展中使用的元数据相同;咱们认为在构建本身的工具时,你可能会发现它颇有用。事实上,这个元数据使IntelliJ系列IDE中的功能可以显示你的Flutter代码中使用的颜色。
与此相关的是IntelliJ和Android Studio中的一个新功能,它能够显示Color.fromARGB()和Color.fromRGBO()的色块。
特别感谢GitHub上的dratushnyy,感谢他对IntelliJ中颜色预览的改进。
为了响应插件做者在用户调查中的广泛需求,最近咱们一直在尝试如何让Flutter和主机平台之间的通讯更安全,更方便插件和Add-to-App。为了知足这一需求,咱们建立了Pigeon,这是一个命令行工具,它使用Dart语法在平台通道之上生成类型安全的消息代码,而不须要添加额外的运行时依赖。经过Pigeon,你能够调用Java/Objective-C/Kotlin/Swift类方法,并经过直接调用Dart方法(反之亦然)来传递非原生数据对象,而不是手动匹配平台通道上的方法字符串和序列化参数。
虽然还在预发布阶段,但Pigeon已经足够成熟,以致于咱们本身在video_player插件中使用它。若是你有兴趣测试一下Pigeon,请看更新后的平台频道文档以及这个示例项目。
在Flutter 1.20的时间框架内发生了这么多伟大的事情,咱们不能在这里列出全部的工具。然而,你可能想看看更新公告自己。
和以往同样,咱们尽可能保持较低的中断修改数量。如下是Flutter 1.20版本的列表。
但愿你和咱们同样,对这个版本感到兴奋。从不少角度来看,这是Flutter最大的版本。随着性能的提升,新的和更新的小组件,以及工具的改进,咱们只能击中亮点。咱们要感谢您,强大的和不断增加的社区贡献者,使每个Flutter版本都比以前的版本更大、更快、更强。还有更多的内容,对null安全的支持,新版本的Ads、Maps和WebView插件,以及更多的工具支持正在进行中。(事实上,你可能会对Bob Nystrom关于理解null安全的深刻研究感兴趣)。
有了Flutter和工具中全部这些额外的力量,你打算构建什么?