新版本包括增强 iOS 端性能的 Metal 支持、新的 Material 组件和新的 Network 跟踪工具等!
本文最初发布于 Medium 博客,经 Flutter 开发团队授权由 InfoQ 中文站翻译并分享。
今天我们很高兴为大家带来了 Flutter 1.17,也是我们 2020 年的第一个稳定版本。
对所有人来说今年都是充满挑战的一年。我们的目标是大约每个季度发布一个稳定版本,但这次的版本花费的时间要长一些,因为我们一直在针对新的发布流程调整我们的基础架构。我们继续坚持质量至上的原则,相信新的发布模型将提升我们为稳定分支提供关键修复的能力。
今天发布的版本包含大量修复内容,解决了自 1.12 稳定版本以来报告的 6,339 个问题,这么大的数字也是前所未有的。如此大的进展很大一部分归功于我们与 Nevercode 的合作关系,这种合作提升了我们对客户问题的响应速度。今年到目前为止,我们关闭的问题比新增的问题更多,使问题总量净减少了约 800 个。我们从 231 位贡献者那里合并了 3,164 个 PR,修复了大批错误。这些数字都是非常可观的,在这个充满挑战的时期,我们由衷感谢大家的辛勤工作和持续贡献。
如果你对我们在这一版本中合并 PR 的完整列表感兴趣,则可以访问 flutter.dev 网站查看。除了质量改进之外,我们还设法在该版本中添加了一些新功能,包括 iOS 上的 Metal 支持、新的 Material 组件和新的 Network 跟踪工具等等!新版本还包含了 Dart 2.8,你可以在 Dart 博客上查看有关 Dart 2.8 的更多信息。
移动端性能和文件大小改进
新版本的主要重点是继续改进性能和内存方面的表现。只需将你的应用升级到新版本,你的用户就会看到更快的动画、体积更小的应用和更低的内存占用率。在新版本中,默认导航场景(非透明路径)的速度将提高 20%-37%。对于简单的 iOS 动画而言,CPU/GPU 使用率最多会降低 40%,具体取决于硬件配置(在 PR 14104 和 PR 13976 中有详细说明)。
在多个修复的共同作用下,新版本还显著缩减了应用的大小。例如,Android 的 Flutter Gallery 示例在 2019 年底是 9.6MB,现在则是 8.1MB,减少了 18.5%。
至于内存使用率,新版本在快速滚动浏览大图像时减少了 70%的内存占用,这也可能带来性能的提升,具体则取决于设备的内存大小。
测试应用的内存占用率(越低越好)
而最明显的性能改进则来自于 iOS 端对 Metal 的支持。
Metal 支持可将 iOS 端的性能提升 50%
苹果公司在 iOS 上的 Metal 几乎可以直接访问底层 GPU,这也是苹果公司推荐的图形 API。在完全支持 Metal 的 iOS 设备上,Flutter 现在默认开启 Metal,让你的 Flutter 应用在大多数时候都能运行得更快,平均提升约 50%的渲染速度(取决于你的负载):
https://github.com/flutter/flutter/issues/53768
分别使用 OpenGL 与 Metal 的 iOS 应用单帧渲染时间(越低越好)
对于不完全支持 Metal 的设备(A7 之前的芯片版本或运行 iOS 10 版本之前的设备),Flutter 会像过去一样使用 OpenGL,为较旧的设备提供原生渲染速度。更多详细信息,请在 Flutter Wiki 上查看 iOS 上的 Metal 常见问题:
https://github.com/flutter/flutter/wiki/Metal-on-iOS-FAQ
Material 小部件:NavigationRail、DatePicker 等
我们会根据内部和外部客户的反馈,持续改进和发展 Flutter 中实现的 Material 设计系统。在新版本中我们添加了 NavigationRail,这是一个提供响应式应用导航模型的小部件。它是由 Google Material Design 团队设计和实现的。NavigationRail 非常适合可以在移动和桌面端屏幕之间切换的应用,因为随着应用屏幕尺寸的增加,它很容易换成 BottomNavigator。
新的 NavigationRail 小部件
关于 NavigationRail 的效果,请查看 web_dashboard 示例:
https://github.com/flutter/samples/tree/master/experimental/web_dashboard
或在 DartPad 上尝试:
https://dartpad.dev/b9c6cd345fd1cff643353c1f4902f888
除了新的小部件之外,新版本还提供了 Material DatePicker 和文本选择溢出小部件的更新。