Flutter 1.20 正式版前瞻、新更新公布
原文地址:https://medium.com/flutter/an...
性能改良,挪动主动填充,一个新的小组件和更多!
咱们对Flutter的继续愿景是提供一个便携式工具箱,用于构建令人惊叹的体验,无论您在哪里都能够在屏幕上画出像素。每一次公布,咱们都会持续致力,确保Flutter对咱们反对的每个平台都是疾速、好看、高效和凋谢的。在明天公布到咱们稳固频道的Flutter 1.20中,Flutter对这四大支柱中的每一个都有改良。
在快的类别中,咱们从渲染引擎的最底层和Dart语言自身,都有多项性能改良。
为了使您可能构建更加漂亮的Flutter应用程序,这个版本有几个UI加强性能,包含期待已久的主动填充反对,一种新的形式来分层您的组件以反对平移和缩放,新的鼠标光标反对,更新旧的最喜爱的Material组件(如工夫和日期选择器/),以及一个全新的响应式许可页面,用于桌面和挪动模式因素Flutter应用程序中的对于框。
为了确保你持续放弃更高的生产力,咱们曾经更新了Visual Studio Code的Flutter扩大,它将Dart DevTools间接带入你的IDE中,当你挪动你的文件时自动更新你的导入语句,以及一套新的元数据用于构建你本人的工具。
而正是因为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,所以感激你们/!
Flutter的每个新版本都会带来更多的使用量和能源。事实上,在4月份,咱们报道,Google Play商店中的Flutter利用数量曾经达到了5万个,峰值速度为10000个新利用/月。当初,仅仅过了三个多月,Google Play中的Flutter利用曾经超过了9万个。咱们在印度看到了很多这样的增长,印度当初是Flutter开发者的第一大地区,在过来的6个月里翻了一番,这与谷歌加大对该地区的投资十分吻合。最初,没有Dart,Flutter就不是Flutter,所以很快乐看到IEEE报告说,Dart自去年以来曾经回升了4位,在他们追踪的前50种语言中排名第12。
Flutter和Dart的性能改良
在Flutter团队中,咱们始终在寻找新的办法来升高你的利用的大小和提早。作为前者的一个例子,这个版本修复了图标字体树摇动的工具性能问题和使字体树摇动成为默认行为,当构建您的非Web应用程序时。图标字体树摇动会移除你的利用中不应用的图标,从而减小尺寸。对Flutter Gallery利用应用这个性能,咱们发现它将利用大小缩小了100kb。当初,当你在进行公布构建时,你的挪动利用中默认会有这种行为。目前它仅限于TrueType Fonts,但这一限度将在将来的版本中被勾销。
咱们在这个版本中做的另一项性能改良是应用预热阶段缩小了动画初始显示时的抖动。你能够在这个动画中看到一个改善抖动的例子 (slowed down to half speed)。
无SkSL热身和有SkSL热身的动画
如果一个Flutter利用在第一次运行时有卡顿的动画,Skia Shading Language shader提供了预编译作为你的利用构建的一部分,能够将其速度进步2倍以上。如果你想利用这个高级性能,请看flutter.dev上的SkSL预热页面。
最初,在咱们针对桌面模式因素进行优化的同时,咱们持续欠缺咱们的鼠标反对。在这个版本中,咱们重构了鼠标命中测试零碎,提供了许多因为性能问题而被屏蔽的架构劣势。重构使咱们在基于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利用都变得更好!
公布插件须要新的pubspec.yaml格局。
当然,Flutter不仅仅是小组件,还有工具,这个版本的更新太多,无奈一一提及。不过,这里有一些亮点。
首先是一个公益申明:如果你是Flutter插件作者,那么传统的pubspec.yaml
格局不再反对公布插件。如果你尝试,在执行_pub publish_时,你会失去以下错误信息。
插件公布时遗留的pubspec格局错误信息。
旧的格局不反对指定你的插件反对哪些平台,并且从Flutter 1.12开始就被废除了。 新的pubspec.yaml格局当初须要公布新的或更新的插件。
对于插件的客户端,这些工具依然可能了解旧的pubspec格局,并且在可预感的将来也将如此。pub.dev上所有应用传统pubspec.yaml
格局的现有插件在可预感的将来将持续与Flutter应用程序一起工作。
在Visual Studio代码中预览嵌入式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的另一个新性能是在重命名时更新导入,当文件被挪动或重命名时,它会自动更新_import_语句。
在Visual Studio代码中挪动Dart文件,更新导入语句。
该性能目前只实用于单个文件,而不是多个文件或文件夹,但该反对行将到来。
每个工具制造者的工具元数据。
还有一个须要提及的更新是针对构建Flutter工具的人。咱们在GitHub上创立了一个新的我的项目来捕捉和公布对于Flutter框架自身的元数据。它为以下内容提供了机器可读的数据文件。
- a catalog of all the current Flutter widgets (395 widgets!)
- 一个Flutter框架色彩名称到色彩值的映射,用于Material和Cupertino色彩集。
- 图标元数据,用于资料和Cupertino图标,包含图标名称和预览图标。
这与咱们本人在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的工夫框架内产生了这么多平凡的事件,咱们不能在这里列出所有的工具。然而,你可能想看看更新布告自身。
- VS Code extensions v3.13
- VS Code extensions v3.12
- VS Code extensions v3.11
- Flutter IntelliJ Plugin M46 Release
- Flutter IntelliJ Plugin M47 Release
- Flutter IntelliJ Plugin M48 Release
- Flutter开发者的新工具,内置于Flutter中
Breaking Changes
和以往一样,咱们尽量放弃较低的中断批改数量。以下是Flutter 1.20版本的列表。
- 55336 为CupertinoLocalizations增加tabSemanticsLabel - 迁徙指南PR
- 55977将clipBehavior增加到带有clipRect的组件中
- 55998 修复导航仪页面更新解体时仍有路由期待的问题
- 56582 更新Cupertino中的Tab语义,使之与Material雷同
- 57065 删除NestedScrollView的重叠治理分片的废除子参数。
- 58392iOS两头拖动流动指标。
Summary
心愿你和咱们一样,对这个版本感到兴奋。从很多角度来看,这是Flutter最大的版本。随着性能的进步,新的和更新的小组件,以及工具的改良,咱们只能击中亮点。咱们要感谢您,弱小的和一直增长的社区贡献者,使每一个Flutter版本都比之前的版本更大、更快、更强。还有更多的内容,对null平安的反对,新版本的Ads、Maps和WebView插件,以及更多的工具反对正在进行中。(事实上,你可能会对Bob Nystrom对于了解null平安的深入研究感兴趣)。
有了Flutter和工具中所有这些额定的力量,你打算构建什么?