共计 5897 个字符,预计需要花费 15 分钟才能阅读完成。
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 和工具中所有这些额定的力量,你打算构建什么?