likes
comments
collection
share

Flutter 3.19 的新增功能 借助 Gemini API、Impeller 更新和 Windows Arm64 支持彻底改变应用程序开发

作者站长头像
站长
· 阅读数 3

Flutter 最新的版本,Flutter 3.19出来了。此版本为 Gemini 带来了新的 Dart SDK、一个使开发人员能够为小部件动画添加细粒度控制的小部件、通过更新 Impeller 的渲染提升、帮助实现深度链接的工具、Windows Arm64 支持等等!

AI集成

Gemini Google AI Dart SDK 测试版发布

Google AI Dart SDK 已发布测试版。这使您能够将生成式 AI 功能构建到您的 Dart 或 Flutter 应用程序中,该应用程序由 Google 最新的 AI 模型系列 Gemini 提供支持。现在 pub.dev 上有一个软件包,如何使用 Google AI Dart SDK 进行构建,或直接进入 Dart 快速入门google_generative_ai

Flutter 3.19 的新增功能 借助 Gemini API、Impeller 更新和 Windows Arm64 支持彻底改变应用程序开发

框架

滚动改进

如果您拖动两根手指,Flutter 的滚动速度会提高一倍。现在,您可以配置默认值,以获取与手指数无关的滚动行为。有关此更改的详细信息,请参阅迁移指南ScrollBehavior``MultiTouchDragStrategy.latestPointer

我们还完成了 和 的错误修复,解决了许多报告的崩溃和意外行为。SingleChildScrollView``ReorderableList

在二维滚动中,我们解决了一个问题,因此现在,如果在向任一方向滚动时拖动或点击,滚动活动将按预期停止。

自上一个版本以来,软件包中的小部件也进行了更新,提供了更多的润色,增加了对合并单元格的支持,并在上一个稳定版本 3.16 之后采用了 2D 基础的更多新功能。TableView``two_dimensional_scrollables

动画风格

Flutter 有一个新的小部件,允许用户覆盖小部件中的默认动画行为,例如 、 和 ,为开发人员提供了覆盖动画曲线和持续时间的能力。AnimationStyle``MaterialApp``ExpansionTile``PopupMenuButton

SegmentedButton.style

添加了一个静态实用程序方法,就像其他按钮类型提供的方法一样。此方法可以快速创建可以与其他分段按钮共享或用于配置应用程序的 .styleFrom``SegmentedButton``ButtonStyle``SegmentedButtonTheme

自适应开关

此自适应组件在 macOS 和 iOS 上的外观和感觉是原生的,并且在其他地方具有 Material Design 的外观和感觉。它不依赖于库比蒂诺库,因此其 API 在所有平台上都完全相同。

请参阅构造函数 API 页面上自适应开关拉取请求和实时示例。Switch.adaptive

SemanticsProperties 辅助功能标识符

新辅助功能标识符为本机辅助功能层次结构中的语义节点提供标识符。在 Android 上,它在辅助功能层次结构中显示为 。在 iOS 上,这会设置 ,它跨越了引擎框架SemanticsProperties``resource-id``UIAccessibilityElement.accessibilityIdentifier

增加了对文本小组件状态的访问

我们添加了对 in 和 的支持,以便您可以侦听更改。MaterialStatesController``TextField``TextFormField``MaterialState

UndoHistory 堆栈

修复了日语键盘上撤消/重做历史记录可能消失的问题。您现在可以在将条目推送到堆栈之前对其进行修改。UndoHistory

Engine

Impeller progress

Android OpenGL 预览版

在 3.16 稳定版中,我们邀请用户在支持 Vulkan 的 Android 设备上试用 Impeller,覆盖了该领域 77% 的 Android 设备。在过去的几个月里,我们通过添加对 MSAA 的支持,将 Impeller 的 OpenGL 后端提升到与 Vulkan 后端同等的功能。这意味着几乎所有 Android 设备上的 Flutter 应用程序都应该正确渲染,但即将推出的少数剩余功能除外,例如自定义着色器和对外部纹理的完全支持。

我们要求 Flutter 开发人员升级到最新的稳定版本,并提交有关启用 Impeller 时观察到的任何缺点的问题。现阶段的反馈对于确保 Impeller 在 Android 上取得成功以及我们可以自信地在今年晚些时候的版本中将其作为默认渲染器非常宝贵。Android 硬件生态系统比 iOS 生态系统更加多样化。因此,有关 Impeller 的最有用的反馈应包括有关发生问题的特定设备和 Android 版本的详细信息。

此外,提醒一下,Impeller 的 Vulkan 后端在调试版本中支持额外的调试功能,超出了 Skia 使用的功能,并且这些功能具有额外的运行时开销。因此,从配置文件发布版本提供有关 Impeller 性能的反馈非常重要。错误报告应包括来自 DevTools 的时间线,以及与同一设备上 Skia 后端的比较。最后,一如既往,我们非常感谢您的反馈,其中包括一个演示该问题的小型可重现测试用例。

路线图

在渲染保真度之后,我们在 Impeller 的 Android 预览阶段的主要关注点是性能。我们继续取得渐进式收益,但一些更大的改进也在进行中。我们希望工作能够利用 Vulkan 子通道来大大提高高级混合模式的性能。此外,我们还预计,渲染策略的改变,从总是镶嵌 CPU 上的每条路径转向 Stencil-then-cover 方法,将大大降低 Impeller 在 Android 和 iOS 上的 CPU 利用率。最后,我们预计高斯模糊的新实现将与 Skia 实现的吞吐量相匹配,并改进 iOS 上模糊的惯用用法。

API 改进

字形信息

此版本包括 对 对象的两个新方法:、 和 ,每个方法都返回一个新类型的对象。查看有关新类型的文档。dart:ui``Paragraph``getClosestGlyphInfoForOffset``getGlyphInfoAt``GlyphInfo``GlyphInfo

GPU 跟踪

在 Impeller on Metal(iOS、macOS、Simulator)和支持 Vulkan 的 Android 设备上,Flutter 引擎现在在调试和配置文件构建中报告时间轴中每一帧的 GPU 时间。可以在 DevTools 的“GPUTracer”标题下检查 GPU 帧计时。

Flutter 3.19 的新增功能 借助 Gemini API、Impeller 更新和 Windows Arm64 支持彻底改变应用程序开发

请注意,由于非 Vulkan Android 设备可能会误报其对查询 GPU 计时的支持,因此只能在这些设备上的文件中设置标志来启用 Impeller 的 GPU 跟踪。AndroidManifest.xml

<meta-data
  android:name="io.flutter.embedding.android.EnableOpenGLGPUTracing"
  android:value="true" />

性能优化

专用化常量

该团队为 Impeller 添加了对专用化常量的支持。利用 Impeller 着色器中的这一功能,将 Flutter 引擎的未压缩二进制大小减少了近 350KB。

背景滤镜加速

还有很多工作要做,但是这个版本包括一些不错的性能改进,用于背景滤镜和叶轮上的模糊。特别是,注意到 Impeller 错误地请求了从屏幕上纹理读取的功能。删除此功能改进了场景,在我们的基准测试中包含多个背景滤镜,具体取决于复杂性,范围从 20% 到 70% 不等。

此外,Impeller 不再无条件地将模板缓冲区存储在每个背景滤镜上。相反,任何影响操作的剪辑都会被记录下来,并在恢复背景滤镜的保存图层时重放到新的模板缓冲区中。

Flutter 3.19 的新增功能 借助 Gemini API、Impeller 更新和 Windows Arm64 支持彻底改变应用程序开发

通过这一更改,我们在运行 Impeller 和 Vulkan 后端的 Pixel 7 Pro 上的动画高级混合模式基准测试将平均 GPU 帧时间从 55 毫秒提高到 16 毫秒,并将 90% 光栅线程 CPU 时间从大约 110 毫秒缩短到 22 毫秒。

Android

深度链接 Web 验证器

我们从开发人员那里了解到,深度链接(将用户从 Web URL 带到移动应用程序中的特定页面)一直难以实现,而且容易出错。因此,我们首先创建了一个验证工具,以帮助开发人员了解哪些链接配置不正确,并提供实现指南。我们非常高兴地与大家分享,Flutter 深度链接验证器的早期版本现已推出!

在这个早期版本中,Flutter 深度链接验证器支持 Android 上的 Web 检查,这意味着验证文件的设置。你可以打开 DevTools,点击进入 Deep Links 选项卡,导入一个包含 Deeplinks 的 Flutter 项目。深度链接验证程序会告诉您 Web 文件配置是否正确。有关更多信息,您可以参考深度链接验证工具测试说明assetlinks.json

我们希望这个工具是简化深度链接实施过程的第一步。我们将继续努力为iOS上的Web检查以及iOS和Android上的应用程序检查提供未来的支持!

Flutter 3.19 的新增功能 借助 Gemini API、Impeller 更新和 Windows Arm64 支持彻底改变应用程序开发

支持 Share.invoke

之前,Android 中缺少文本字段和视图上的默认 “共享”按钮,但我们在此版本中添加了该按钮,以确保所有默认上下文菜单按钮在每个平台上都可用。您可以在 PR #107578 中关注正在进行的工作。

原生资产功能

如果你对 Flutter 代码中 Flutter 与其他语言函数的互操作性感兴趣,你现在可以通过 Android 上的原生资产执行 FFI 调用,作为我们正在进行的支持原生资产工作的一部分。

纹理层混合合成 (TLHC) 模式

Flutter 3.19 包括现在使 Google 地图和文本输入放大镜在 TLHC 模式下工作的工作,这意味着您的应用程序性能更好。如果您使用的是 Google 地图,我们鼓励您测试这些更改,并让我们知道您的反馈!

这项工作不包括框架或引擎下的提交,但您可以在 PR 5408 中看到这项工作,以及测试 THLC 的步骤。

自定义系统范围的文本选择工具栏按钮

Android 应用可以添加显示在所有文本选择菜单(长按文本时出现的菜单)中的自定义文本选择菜单项。Flutter 的选择菜单现在包含了这些项目。TextField

iOS系统

Flutter iOS 原生字体

Flutter 文本现在在 iOS 上看起来更紧凑,更原生。根据 Apple 设计指南,iOS 上较小的字体应该更加分散,以便于在移动设备上阅读,而较大的字体应该更紧凑,不会占用太多空间。以前,我们在所有情况下都错误地使用了更小、更间隔的字体。现在,默认情况下 Flutter 将使用紧凑字体来处理较大的文本。

Flutter 3.19 的新增功能 借助 Gemini API、Impeller 更新和 Windows Arm64 支持彻底改变应用程序开发

开发工具

DevTools 更新

此版本中 DevTools 的一些亮点包括:

  • 在 DevTools 中添加了新功能和屏幕,用于验证 Android 上的深度链接设置。
  • “增强跟踪”菜单中添加了一个选项,用于跟踪平台渠道活动。这对于带有插件的应用程序很有用。

Flutter 3.19 的新增功能 借助 Gemini API、Impeller 更新和 Windows Arm64 支持彻底改变应用程序开发

  • 现在,当没有连接的应用程序时,性能和 CPU 探查器屏幕可用。可以重新加载以前从 DevTools 保存的性能数据或 CPU 配置文件,以便从这些屏幕查看。
  • VS Code 中的 Flutter 侧边栏现在能够启用新平台(如果未为当前项目启用),侧边栏中的 DevTools 菜单现在可以选择在外部浏览器窗口中打开 DevTools。

若要了解详细信息,请查看 DevTools 2.29.02.30.0 和 2.31.0 的发行说明。

桌面

Windows Arm64 支持

Windows 上的 Flutter 现在正在接受对 Arm64 架构的初始支持,这种初始支持为在 Windows Arm64 设备上本机运行的更高效、更高性能的 Flutter 应用程序铺平了道路。虽然仍在开发中,但进展可在 GitHub issue #62597 上跟踪,此举标志着 Flutter 开发人员的有希望的增强,旨在为更广泛的 Windows 设备优化他们的应用程序。

生态系统

所需原因隐私清单

Flutter 现在在 iOS 上包含隐私清单,以满足即将到来的 Apple 要求

Flutter 和 Dart 软件包生态系统的进展

如果你错过了,请查看 1 月份关于 Flutter 和 Dart 软件包生态系统进展的博文。

弃用和重大更改

放弃对 Windows 7 和 8 的支持

随着 Flutter 的发展,我们很高兴通过 Dart 3.3 和 Flutter 3.19 版本结束对 Windows 7 和 8 的支持来专注于最新技术。这种转变符合 Microsoft 的战略,使我们能够在现代操作系统上增强 Flutter。我们感谢开发人员需要做出的调整,并致力于帮助您完成这一过渡。此举为在受支持的 Windows 版本上实现更安全、更高效和功能更丰富的开发环境铺平了道路。感谢您的理解和适应能力,我们将继续在 Flutter 生态系统中共同创新。

Impeller dithering flag

如 3.16 稳定版的发行说明中所述,全局标志已被删除。有关完整详细信息,请参阅网站上的重大变更公告Paint.enableDithering

弃用 iOS 11

由于调用某些网络 API 时出现运行时崩溃,Flutter 不再支持 iOS 11。这意味着针对 Flutter 3.16.6 及更高版本构建的应用程序不会在这些设备上运行。

弃用自动渲染模式

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

一如既往,非常感谢社区提供的测试——这些测试有助于我们识别这些重大更改。要了解更多信息,请查看 Flutter 的重大变更政策

这是第一个将 flutter_driver 包引入弃用策略的版本,除了已经支持的包、flutter 和 flutter_test。

结论

Flutter 正演变成强大而高效的工具包,直接证明了我们令人难以置信的社区的奉献精神和辛勤工作。衷心感谢你们每一个人。

为了深入了解此版本所实现的细节,我们邀请您查看发行说明和更改日志,以获取 Flutter 3.19 中新增功能的完整列表。

Flutter 3.19 和 Dart 3.3 现在在稳定频道上可用。使用 Flutter 踏上这段最新的旅程就像运行 Flutter 升级一样简单。