Flutter 1.17 稳定版更新

Flutter 1.17 已发布,这也是2020年的首个稳定版本。更新内容包括对更快的 iOS 性能的 Metal 支持、新的 Material 组件和新的 Network 跟踪工具,以及 Dart 2.8 等。

此版本包含了大量的 bugfix,自 1.12 稳定版发布以来,团队关闭了 6339 个 issue。今年到目前为止,团队关闭的问题数量比打开的要多,净减少大约 800 个问题,这些问题合并自 231 名贡献者提交的 3164 个 PR。查看 flutter.dev site 了解所有 PR 列表。

下面介绍部分值得关注的更新。

移动端性能和体积优化

此版本的更新重点之一是继续在性能和内存方面进行整体优化。团队提到,将应用升级到 1.17 版本,用户将会看到更快的动画、更小的应用和更低的内存占用率。对于默认导航场景(非透明路径),新版的速度将有 20%-37% 的提升。另外,对于简单 iOS 动画的 CPU/GPU 使用率,则会最多降低 40%,具体取决于硬件配置。

应用体积优化方面,官方提供了一个数据,在2019年年底,安卓版 Flutter Gallery Demo 的大小是 9.6MB,现在是 8.1MB,减少了 18.5%。而在内存使用方面,此版本在快速滚动浏览大图片时,内存占用率减少了 70%。当然,具体的性能提升与设备本身内存多少有关。

合并 PR 前后测试应用的内存占用变化(越低越好)

Metal 支持将 iOS 端性能提升 50%

苹果在 iOS 上对 Metal 的支持提供了几乎可以直接访问底层 GPU 的能力,这也是苹果推荐的图形 API。在完全支持 Metal 的 iOS 设备上,Flutter 现在默认使用 Metal,使得 Flutter 应用有了更快的运行速度,平均提升 50% 左右的渲染速度(取决于工作负载)。

对于不完全支持 Metal 的设备(使用旧于 A7 处理器的设备或运行 iOS 10 之前版本的设备),Flutter 则使用 OpenGL 来为旧设备提供原生的渲染速度。详情查看 Flutter wiki。

Material 风格小部件:NavigationRail 和 DatePicker 等

新版本增加了名为 NavigationRail 的小部件,它由 Google Material Design 团队设计并实现,提供了一个响应式的应用导航模型。NavigationRail 非常适合可以在移动和桌面端之间切换的应用程序,因为当应用程序的屏幕尺寸增大时,它可以非常容易切换成 BottomNavigator。

此版本还对 Material 风格的 DatePicker 小部件进行了更新,包括使用新的视觉效果以遵循已升级的 Material 指南,另外就是新的文本输入模式。

Flutter 应用更轻松地使用 Google 字体

开发者可在应用中轻松尝试和使用来自 fonts.google.com 的任何字体。当应用程序准备好发布后,开发者就可以决定用户是通过 API 下载字体,还是直接将字体打包预装在应用中。

其他一些破坏性变化:

#45940 弃用 UpdateLiveRegionEvent

#49389 快速滚动时延迟图像解码

#49391 文本选择溢出 (Android)

#50318 实时图像缓存

#50733 在 gen_l10n 中生成信息查询结果

#51435 从 RouteSettings 中删除 isinitialroute

#52781 将 mouse_tracking.dart 移至 rendering