Flutter 3.13 现已发布,并包含 Dart 3.1。自上次发布以来的三个月时间内,此版本共合并了 724 个 PR。一些更新亮点包括:
Engine
对 Impeller(新图形渲染器)进行了多项改进,并为可折叠设备添加了新的引擎 API。
Impeller
iOS 性能改进
在此版本中继续改进了 Impeller 在 iOS 上的性能。经过多方面的优化,现在 iOS 上的 Impeller 渲染器不仅延迟更低(通过完全消除着色器编译卡顿),而且在某些基准测试中平均吞吐量也更高。在 flutter/gallery 过渡性能基准测试中,平均帧光栅化时间现在约为使用 Skia 时的一半。
这一进步还得益于:
- 启用脏区管理和部分重绘(flutter/engine#40959)
- 实现并发渲染通道编码(flutter/engine#42028)
- 对文本渲染进行了大量改进(flutter/engine#41290、flutter/engine#41780、flutter/engine#42417)
- 为 convex shapes 添加了快速路径,以避免昂贵的 tessellation calls(flutter/engine#41834)
- 开始在一些操作中使用计算着色器(flutter/engine#42192)
- 更热切地删减越界绘制操作(flutter/engine#41606)
Fidelity 改进
在听取并解决用户的反馈后,在使用 Impeller 时,广色域色彩现已成为 iOS 上的默认设置。
Android 上 Impeller 的进度更新
继续在 Impeller 的 Vulkan 后端方面取得进展,但尚未达到官方预览期所需的质量水平。计划将在今年晚些时候以稳定版本的形式进入 Android 版 Impeller 的预览期。
尽管 Android 上的 Impeller 尚未完全准备好进行预览,但 OpenGL 和 Vulkan 后端已受益于过去一年中对 Impeller 的 HAL 所做的许多与后端无关的优化。特别是,Android 的平均帧光栅化时间在 flutter/gallery 转换性能基准测试中也得到了显着改善。进一步的改进正在进行中,以便 Android 上的预览可以达到高质量。
macOS 上的 Impeller(和 Wonderous)
适用于 macOS 的 Impeller 现已推出预览版。用户可以按照 Impeller 页面上的指导测试 Impeller 并在应用程序中启用。
New engine API
改进的可折叠设备支持
为了更好地支持可折叠设备,添加了一个新的 API 来检索显示屏的各种属性。新的 getter FlutterView.display 返回一个 Display 对象。Display 对象会报告显示屏的物理尺寸、设备像素比和刷新率。可查看 setPreferredOrientations 以获取使用新 API 的示例。
Framework
Material
对 Material Framework 进行了多项改进,以 1) 提供更多平台适应性,2) 允许更多自定义,3) 添加新功能。
TextField 中的字符识别
在 iOS 上使用 TextField 时,用户将自动看到一个使用设备摄像头识别字符并将其插入字段的选项。
平台自适应对话框
AlertDialog 中添加了自适应构造函数以及自适应函数 showAdaptiveDialog,以根据当前平台显示 Material 或 Cupertino 对话框。
现在使用 AlertDialog.adaptive() 在 iOS 上使用 CupertinoAlertDialog 小部件:
以及 Android 上的 Material AlertDialog。
带年月模式的 CupertinoDatePicker
为 CupertinoDatePicker 添加年月模式。
\
Cupertino (iOS-style) check styled radio
useCheckmarkStyle 属性已添加到 CupertinoRadio 中。这还允许 Radio.adaptive 和 RadioListTile.adaptive 小部件控制它们是否在 iOS 上使用 checkmark style。
应用程序生命周期变化
AppLifeCycleListener
添加了 AppLifecycleListener 类,用于侦听应用程序生命周期中的更改,并响应退出应用程序的请求。
Android
新的支持目标
在此版本中,Flutter 现在支持 Android 14/ API 34。虽然仍在开发 Android 14 中的一些新功能(即预测性返回导航),但开发团队已根据新的 Android SDK 对该版本进行了全面测试,并优先修复用户可能发现的任何相关问题。
iOS
Reduced rotation distortion on iOS
当 iOS 屏幕旋转时,Flutter 应用程序以前会出现一些失真,看起来与原生 iOS 应用程序不同。开发团队做了一些修改来减少失真:
重命名 Runner
创建 Flutter iOS 应用程序时,会在 /ios 文件夹中创建 Runner Xcode 项目和 Xcode 工作区。现在,用户可以重命名工作区或项目,这样就不会出现 Runner 列表了。
为 iOS 17 和 Xcode 15 做准备
随着 iOS 17 和 Xcode 15 即将发布,希望使用此工具链进行开发的用户将需要使用 Flutter 3.13。此外,在下载 Xcode 15 时,还需确保还下载了 iOS 17 模拟器。
破坏性变更和弃用
破坏性变更
下一版本默认 Material 3
下一个Flutter 稳定版本中计划将 ThemeData useMaterial3 默认值从 false 更改为 true。换句话说,应用程序将默认获取 Material 3 颜色、文本样式和其他视觉效果。
可查看 Material 3 demo 预览 M2 和 M3 之间的差异。
Android supported platforms
Flutter 不再支持 Android Jelly Bean API levels(16、17 和 18)。
变更和迁移指南列表
此版本中的破坏性变更包括 v3.10 发布后已弃用的 API。要查看所有受影响的 API 以及其他上下文和迁移指南,可参阅此版本的弃用指南。其中许多都由 Flutter Fix 支持,包括 IDE 中的快速修复,以及使用 dart fix 命令批量应用。
更多详情可查看官方博客。