欢迎回来,迎来又一个令人兴奋的 Flutter 稳定版本!这一次,我们很高兴地推出了 Flutter 3.22。我们将 WebAssembly 引入了稳定频道,为 Android 上的 Impeller 带来了一个功能齐全的 Vulkan 后端,承诺更流畅的图形和主要性能提升。

Flutter 3.22 中的新功能

前言

原文 https://ducafecat.com/blog/whats-new-in-flutter-3-22https://medium.com/flutter/whats-new-in-flutter-3-22-fbde6c164fe3

欢迎回来,迎来又一个令人兴奋的 Flutter 稳定版本!这一次,我们很高兴地推出了 Flutter 3.22。我们将 WebAssembly 引入了稳定频道,为 Android 上的 Impeller 带来了一个功能齐全的 Vulkan 后端,承诺更流畅的图形和主要性能提升。我们还引入了具有新的widget状态属性、动态视图大小调整和改进的表单验证的简化工作流程。但这还不是全部 — 您将发现基于口味条件的资产捆绑、Dart 中 Firebase 的 Vertex AI 预览以及更新的 DevTools,让您的生活更轻松。

自上次更新以来仅仅几个月的时间,我们已经从 Flutter 社区合并了令人印象深刻的 1595 个拉取请求,其中有 37 位新社区成员首次为 Flutter 做出贡献!

因此,请深入了解 Flutter 社区为这一最新版本带来的所有新功能和增强功能!

WebAssembly

随着 Flutter 3.22 的发布,Wasm 现在在稳定频道上可用,提供了显著的性能改进。在我们的内部基准测试中,使用 M1 MacBook 上的 Chrome 浏览器,Wonderous 应用的帧渲染时间平均提高了 2 倍,在最坏情况下提高了 3 倍。

img

这些增强对于具有动画和丰富过渡效果的应用程序至关重要,其中保持平滑帧速率是必不可少的。Wasm 通过减少性能瓶颈来帮助实现这一点,从而实现更流畅的动画和过渡效果。要开始在您的 Flutter Web 应用程序中使用 Wasm,请查看我们的 Dart Wasm 文档和 Flutter Wasm 文档。有关完整公告,请访问 Flutter 在 Google I/O 博客文章。

引擎

Flutter 3.22 引入了对 Impeller 的重大更新,Impeller 是支持您的 Flutter 应用程序的渲染引擎。主要亮点包括在 Android 上完成 Vulkan 后端以获得更流畅的图形和改进的性能,针对模糊效果和复杂路径渲染的持续优化,以及用于与 Impeller 测试的新实验性 API。根据我们的路线图,我们致力于提升 Impeller 的质量和性能,包括完成 iOS 迁移至 Impeller 并扩展 Android 支持。

Impeller

安卓上的 Vulkan 后端功能已经完成

在这个版本中,Impeller 的安卓 Vulkan 后端功能已经完成。特别是在过去的几个月里,团队一直在努力完成快速高级混合的实现,支持使用 FragmentProgram API 自定义片段着色器,PlatformView 支持(尽管需要进行小的 API 迁移),并完全实现所有模糊样式。

安卓预览

在 3.19 稳定版发布之后,在 Impeller 的 OpenGL 后端改进后,我们邀请用户在 Android 设备上尝试使用 Impeller,无论是否支持 Vulkan。在过去的几个月中,经过评估 OpenGL 后端的性能并估计 Vulkan 后端的剩余工作量后,我们决定将精力集中在首先使 Vulkan 后端达到生产就绪状态。

Impeller 解决了着色器编译卡顿的问题。此外,在我们的基准测试中,它在平均帧时间、90th 和 99th 百分位上优于传统渲染器。因此,我们认为 Android 上 Vulkan 后端的性能是可以接受的。在这个版本(3.22)中,选择使用 Impeller 的应用程序将在可用时使用 Vulkan 后端。在未来的版本中,这将成为默认设置。当选择使用 Impeller 的应用程序在不支持 Vulkan 的设备上运行时,Flutter 将自动优雅地回退到使用带 Skia 的 OpenGL ES。您无需采取任何操作。在未来,当我们认为 OpenGL ES Impeller 后端已经达到生产就绪状态时,此回退也将使用 Impeller。

随着 Impeller 在 Android 上的预览持续到 3.22 稳定周期,我们请求 Flutter 开发人员升级到最新的稳定版本,并在启用 Impeller 时提交关于任何注意到的不足的问题。在这个阶段的反馈对确保 Impeller 在 Android 上成功并且我们能够自信地在今年晚些时候的发布中将其作为默认渲染器至关重要。Android 硬件生态系统非常多样化。因此,关于 Impeller 的最有帮助的反馈应包括有关出现问题的特定设备和 Android 版本的详细信息。

模糊性能改进

Impeller 中的模糊已重新实现,适用于 iOS 和 Android。特别是新方法类似于 Skia 的方法,在基准测试中将模糊的 CPU 和 GPU 时间减少了近一半。

下面的图表显示了 iPhone 11 设备上最坏情况、99%分位数、90%分位数和平均帧栅格化时间以及 GPU 帧时间(以毫秒为单位),这是一个病态基准测试,旨在突出模糊性能。在重写 Impeller 的模糊之后,背景滤镜模糊的 CPU 和 GPU 成本几乎减少了一半。这种改进的规模也适用于非病态情况,如在典型应用程序中出现的情况。

img

99%分位数、90%分位数和平均帧栅格化时间以及 GPU 帧时间(以毫秒为单位),这是一个病态基准测试,旨在突出模糊性能,适用于 iPhone 11 设备。

Stencil-then-Cover

Impeller 在 iOS 和 Android 上都已经转移到了一种基于“Stencil-then-Cover”方法的新渲染策略,该方法在 OpenGL Redbook 的“使用模板缓冲绘制填充的凹多边形”章节中有描述。团队成员在 GitHub 问题#123671 中进一步讨论了这种技术在 Flutter 中的应用。

这种方法解决了光栅线程在 CPU 上为复杂路径(例如 SVG 和 Lottie 动画)计算镶嵌的时间过长的问题。更改后,包含复杂路径的帧的总帧时间(CPU 上的 UI 线程 + CPU 上的光栅线程 + GPU 工作)大大降低。用户将注意到,Lottie 动画和其他复杂路径呈现得更加流畅,CPU 利用率更低,GPU 利用率略高。

img

(左)一个 Lottie 动画。以前,Impeller 在一部最新的 iPhone 上渲染它需要 64 毫秒/帧的光栅线程 CPU 时间。(右)在我们实施 Stencil-then-Cover 优化后,同一设备上的相同动画。光栅时间几乎快了 10 倍。

尽管对这些改进感到满意,但仍有更多工作要做。在其他机会中,我们意识到折线生成在 CPU 性能分析中仍然很突出,我们打算调查将这项工作转移到 GPU 上。

新 API

虽然仍处于实验阶段,flutter test 现在接受 --enable-impeller 标志,使用 Vulkan 后端来运行 Impeller。

框架

widget状态属性

MaterialState 已从 Material 库中移出并重命名为 WidgetState ,以便让它可供 Cupertino、基础 Flutter 框架和包作者使用。有关迁移到新 WidgetState 的更多信息,请参阅迁移指南。

动态视图大小调整

优化动态视图大小调整功能,有助于开发人员构建响应式布局,确保在各种设备屏幕上具有更好的 UI 适应性。

改进的表单验证

由于 Flutter 社区成员 SharbelOkzan 的贡献,Flutter 3.22 带来了更灵活的表单验证方法,使开发人员能够创建更健壮的用户输入处理,从而增强了可用性和安全性。

2D API 中的协变量

减少 2D 图形 API 中类型转换的需求简化了开发工作流程并增强了性能,对于游戏和复杂动画至关重要。

根据口味条件捆绑资产

使用口味功能的开发人员现在可以配置单独的资产,仅在为特定口味构建时捆绑。有关更多信息,请查看根据口味有条件地捆绑资产。

使用 Dart 软件包转换资产

用户现在可以配置 Dart 软件包,以在打包时转换其应用程序的资产。有关更多信息,请查看构建时转换资产。

安卓

深度链接可以显著改善您的 Flutter 应用程序中的用户体验,充当快捷方式,无缝地引导用户到应用程序中的特定内容,提高参与度并推动销售。虽然 iOS 的 Universal Links 和 Android 的 App Links 因其安全性和用户友好性而备受推荐,但设置它们可能有点棘手。

在最新的 Flutter 稳定版本中,我们引入了一个深度链接验证工具,该工具位于 DevTools 中,支持检查 Android 应用程序的 Web 配置。在这个版本中,我们添加了一组新功能,以帮助验证您的 Android 清单文件中的设置。

有关使用此工具的更多信息,请查看验证深度链接。

预测性返回手势

Flutter 现在为 Android 即将推出的预测性返回功能增加了更多支持,用户可以在返回手势期间查看上一个路由甚至上一个应用程序。这在 Android 设备上仍然在功能标志后面,但您可以在 GitHub 上找到如何自行尝试的详细信息。

img

img

Flutter 工具强制执行 Gradle、AGP、Java 和 Kotlin 的版本要求

在此版本中,Flutter 工具强制执行有关其支持的 Gradle、Android Gradle 插件(AGP)、Java 和 Kotlin 版本的政策。最初,该工具仅提供警告。

目前,支持的版本范围如下:

  • Gradle — 完全支持 7.0.2 至当前版本,否则警告
  • AGP - 完全支持 7.0.0 至当前版本,否则警告
  • Java - 完全支持 Java 11 至当前版本,否则警告
  • Kotlin - 完全支持 1.5.0 至当前版本,否则警告

在下一个主要版本中,这些警告将变成错误,可以使用标志 --android-skip-build-dependency-validation 来覆盖。更一般地说,该工具在完全停止支持(生成错误)给定版本的这些依赖项之前,会在至少一个版本中提供警告。

这项政策已在相关设计规范中讨论。欢迎评论和反馈。

在 Android 上的 Gradle 构建脚本中支持使用 Gradle Kotlin DSL

Gradle Kotlin DSL 现在支持在 Flutter 中使用,为传统的 Gradle Groovy DSL 提供了另一种选择。这种支持可以提供更好的代码编辑体验,包括自动补全、快速访问文档、源代码导航和上下文感知重构。

这一初始支持是由 GitHub 用户 bartekpacia 贡献的。开发人员现在可以选择将他们的 Gradle 构建脚本重写为 Kotlin,以利用这些优势,尽管 Flutter 工具目前还不允许在使用 flutter create 时选择 Kotlin 而不是 Groovy。

更多详情,请查看由 bartekpacia 提交的 PR 140744。

平台视图改进

所有 Flutter 应用程序开发人员请注意!如果您正在使用 Flutter 构建依赖于原生 Android 组件(如地图、Web 视图或某些 UI 元素)的应用程序,我们有一些重要消息。

由于 Android 14 中的一个错误,使用旧版本 Flutter 构建的应用程序可能在运行此新 Android 版本的设备上无法正常工作。

Flutter 3.22 修复了此问题,并改善了您的 Android 应用中这些原生组件的整体性能。因此,为了确保您的应用在所有 Android 设备上运行顺畅,请确保使用 Flutter 3.22 重新构建并发布您的应用。

此更新还包括幕后改进,以使 Android 上的平台视图更可靠且整体性能更佳。

不再支持 KitKat

Flutter 的最低支持 Android 版本现在是棒棒糖(API 21)。从 Flutter 的 3.22 稳定版开始,Flutter 将不再在运行 Android KitKat(API 19)的设备上运行。有关更多详细信息,请参阅我们的弃用指南。

iOS

平台视图性能

我们了解,在 iOS 上,平台视图性能一直是许多 Flutter 开发人员的痛点。特别是在使用平台视图时,在滚动视图中尤为明显。

最近的更新直接解决了这些问题,在诸如在文章中嵌入多个内联广告等场景中有了显著改进。以下是我们基准测试中的一些关键改进:

  • 降低 GPU 使用率:GPU 使用率降低了 50%,导致功耗减少,可能会带来更流畅的用户体验。
  • 改进的帧渲染:平均帧渲染时间减少了 1.66 毫秒(33%)。
  • 最小化卡顿:最坏情况下的帧渲染时间减少了 3.8 毫秒(21%)。

如果您以前在滚动视图中使用多个平台视图(如广告、地图等)时遇到性能挑战,这些优化可能会为您提供更流畅、更响应的滚动体验。请尝试一下,然后告诉我们您的想法。

img

img

生态系统

Firebase Dart SDK 预览版的 Vertex AI

Firebase 的 Vertex AI 产品已经发布到公共预览版,并包含 Dart SDK。这使您可以使用 Gemini API 为 Dart 或 Flutter 应用构建生成式 AI 功能,考虑到生产、性能和企业规模。该 SDK 与 Firebase App Check 集成,可保护您的 API 调用,并保护您的后端基础设施免受严重威胁,如计费欺诈、网络钓鱼和应用冒充。立即开始使用 Dart 的入门指南,并使用促销代码免费使用。

img

Google AI Dart SDK 仍然可用,建议仅用于原型设计。Google AI 具有免费访问(在限制和可用情况下)和按使用量计费的定价。如果您一直在使用 Google AI Dart SDK 进行原型设计,并准备迁移到用于 Firebase 的 Vertex AI,请查看迁移指南。

DevTools 更新

我们继续改进 DevTools,这是用于 Dart 和 Flutter 的性能和调试工具套件。此版本包括性能改进、一般润色以及新功能,如在时间轴中包含 CPU 样本、高级过滤和支持导入和导出内存快照。

其他值得注意的改进是与支持 DevTools 扩展作者的 devtools_extensionsdevtools_app_shared 软件包一起发布的。我们增加了对连接扩展到新的 Dart Tooling Daemon (DTD) 的支持,这允许 DevTools 扩展访问其他 DTD 客户端注册的公共方法,比如 IDE,并允许访问一个用于与开发项目交互的最小文件系统 API。

要了解 Flutter 3.22 中包含的所有更新,请查看 DevTools 2.32.0、2.33.0 和 2.34.1 的发布说明。

适用于 Flutter 的 Google 移动广告 SDK

对于那些通过广告实现 Flutter 应用程序货币化的用户,我们有一些令人兴奋的消息:Google 为 Flutter 推出了 5.0.1 版本的 Google 移动广告的重大更新!

增强对用户消息平台(UMP)SDK 的支持:此更新增加了对 Android UMP SDK 版本 2.2.0 和 iOS UMP SDK 版本 2.4.0 的最新 API 的支持。UMP SDK 对于遵守隐私法规至关重要,使您更容易获得用户对个性化广告的同意。这个新版本引入了几个新的 API,以简化同意收集过程。

扩展的调解合作伙伴:我们通过与流行的广告合作伙伴(包括 Unity、Meta、AppLovin、Iron Source、Mintegral、Pangle、DT Exchange、InMobi 和 Liftoff)的集成,拓宽了您的广告货币化视野。现在,您可以通过扩展的调解选项和简化的实施方式最大化您的应用收入。

我们鼓励您在您的 Flutter 应用中尝试这些新功能,并告诉我们您希望我们支持哪些其他调解合作伙伴。您的反馈对我们继续增强 Flutter 的 Google 移动广告 SDK 至关重要。

突破性变化和弃用

ColorScheme.fromSeed

如果在 ColorScheme.fromSeed 中使用的 seedColor 具有较高的色度值,则生成的 ColorScheme 可能会产生缺乏活力的淡色调调色板。为了确保输出颜色与种子颜色的预期感觉密切匹配,请考虑将 dynamicSchemeVariant 设置为 DynamicSchemeVariant.fidelityDynamicSchemeVariant.content 。这些选项生成的调色板更接近原始种子颜色。

移除 v1 Android 嵌入

Android 嵌入版本一的删除正在进行中。这可能不会对大多数应用程序产生影响,因为

  1. 多年来,版本二一直是默认版本
  2. Flutter 工具已经阻止构建版本一的应用程序,除非使用标志 -- ignore-deprecation 进行明确覆盖。

此版本完全破坏了对 v1 应用程序的 Flutter 工具支持。不再可能进行覆盖。

插件作者,请注意:当最初弃用 v1 Android 嵌入时,为插件作者编写了迁移文档,网址为 https://docs.flutter.dev/release/breaking-changes/plugin-api-migration。作为此迁移的一部分,建议插件作者通过在其 *Plugin.java 中包含具有以下签名的方法来保持对使用 v1 嵌入的应用程序的支持

public static void registerWith(@NonNull io.flutter.plugin.common.PluginRegistry.Registrar registrar)

我们计划在下一个版本中完全删除 v1 Android 嵌入,到那时,包含具有此签名方法的插件将不再编译(因为它引用了 v1 Android 嵌入的类型)。

它目前没有任何作用,因为此版本已破坏了使用 v1 嵌入的应用程序。我们建议插件作者尽快发布删除了 v1 代码的更新版本,以避免在 Flutter 的未来版本中出现故障。例如,请查看 PR 6494,该 PR 删除了由 Flutter 团队维护的插件。

在 3.22 中删除的弃用功能

本版本中的重大更改包括在 v3.19 发布后到期的弃用 API。要查看所有受影响的 API 以及其他上下文和迁移指南,请参阅此版本的弃用指南。其中许多由 Flutter fix 支持,包括 IDE 中的快速修复。可以使用 dart fix 命令行工具评估和应用批量修复。

一如既往,感谢社区为贡献测试 — 这些帮助我们识别这些重大更改。要了解更多,请查看 Flutter 的重大更改政策。

结论

Flutter 的成功离不开你 — 我们了不起的社区。没有你们无数的贡献和坚定的热情,这个版本的发布是不可能的。衷心感谢你们。

准备好探索 Flutter 3.22 了吗?深入阅读完整的发布说明和更改日志,启动你的终端,然后运行 flutter upgrade 。我们迫不及待想看到你们的作品!

感谢阅读本文

如果有什么建议,请在评论中让我知道。我很乐意改进。


flutter 学习路径


© 猫哥 ducafecat.com

end