Flutter 3.13 的新增功能2D 滚动、更快的图形、Material 3 等等



欢迎回到我们的季度 Flutter 稳定版本,这次是 Flutter 3.13! 自上次发布以来的短短三个月内,我们已经合并了 724 个拉取请求,并且有 55 名社区成员编写了他们对 Flutter 的首次提交!

继续阅读以了解 Flutter 社区为此最新版本贡献的所有新增功能和改进!

引擎

我们对 Impeller(我们的新图形渲染器)进行了多项改进,并为可折叠设备添加了新的引擎 API。


iOS 性能改进

感谢 Flutter 用户的高质量反馈,在此版本中我们继续改进了 Impeller 在 iOS 上的性能。 由于许多不同的优化,iOS 上的 Impeller 渲染器现在不仅具有更低的延迟(通过完全消除着色器编译卡顿),而且在某些基准测试中还具有更高的平均吞吐量。 特别是,在我们的 flutter/gallery 过渡性能基准测试中,平均帧光栅化时间现在约为 Skia 的一半。


iPhone 11 上 Flutter Gallery 过渡性能基准中平均帧光栅化时间的改进。涵盖的时间段大致是从 3.10 分支剪切到 3.13 分支剪切的时间。

这一进步得益于这些优化和其他优化,包括:

启用脏区域管理和部分重绘(flutter/engine#40959)

实现并发渲染通道编码(flutter/engine#42028)

对文本渲染进行了大量改进(flutter/engine#41290、flutter/engine#41780、flutter/engine#42417)

添加了凸形状的快速路径,以避免昂贵的曲面细分调用 (flutter/engine#41834)

开始使用计算着色器进行一些操作 (flutter/engine#42192)

更热衷于剔除越界绘制操作 (flutter/engine#41606)

保真度改进

在 3.10 中,我们宣布使用 Impeller 时可以使用广色域颜色。 在听取并解决用户的反馈后,使用 Impeller 时,广色域颜色现已成为 iOS 上的默认颜色。

Android 上 Impeller 的进度更新

我们继续在 Impeller 的 Vulkan 后端方面取得进展,但它尚未达到官方预览期有用的质量水平。 我们希望确保用户在 Android 上使用 Impeller 的初次体验是高质量的,但我们还没有完全做到这一点。 我们希望在今年晚些时候以稳定版本的形式进入 Android 版 Impeller 的预览期。 尽管 Android 上的 Impeller 尚未完全准备好进行预览,但 OpenGL 和 Vulkan 后端已受益于我们在过去一年中对 Impeller 的 HAL 所做的许多与后端无关的优化。 特别是,Android 的平均帧光栅化时间在 flutter/gallery 转换性能基准测试中也得到了显着改善。 进一步的改进正在进行中,以便 Android 上的预览可以达到高质量。


社区的贡献再次大大加速了我们的进步,特别是 GitHub 用户 ColdPaleLight,他编写了几个备受赞赏的 Impeller 相关补丁,提高了保真度和性能,包括添加对锥形渐变的支持。

请使用 GitHub 上的 Impeller 项目仪表板继续关注我们在 Impeller 上的进展。 我们非常感谢所有反馈,并鼓励用户继续在问题跟踪器中提交保真度和性能问题。

macOS 上的 Impeller(和 Wonderous)

在我们的上一个稳定版本中,我们宣布 Impeller(我们的渲染引擎的重写版本)将在 iOS 上默认启用。 从那时起,我们收到了客户的良好反馈。 现在,我们很高兴地宣布适用于 macOS 的 Impeller 现已推出预览版。 您可以按照 Impeller 页面上的指导测试 Impeller 并在您的应用程序中启用它。

我们渴望您对此进行测试并提供反馈。 帮助我们改进 macOS 的 Impeller 的最佳方法是通过在没有 SkSL 预热的情况下运行 macOS 应用程序来建立基准指标,并使用 DevTools 查找由于着色器编译而导致的卡顿实例。 接下来,使用 Impeller 测试您的应用程序 - 单击并检查错误、性能改进或性能回归。 如果您发现任何问题,我们强烈建议您将其提交到 GitHub。 请务必包含有关您正在运行的设备、视频录制以及性能跟踪导出的信息。

想要在 macOS 上尝试 Impeller? 从 Mac App Store 安装 Wonderous!


新引擎API

改进的可折叠支撑

为了更好地支持可折叠设备,我们添加了一个新的 API 来检索显示器的各种属性。 新的 getter FlutterView.display 返回一个 Display 对象。 Display 对象报告显示器的物理尺寸、设备像素比和刷新率。 查看 setPreferredOrientations 以获取使用新 API 的示例。

框架

Material

我们对 Material Framework 进行了多项改进,以 1) 提供更多平台适应性,2) 允许更多定制,3) 添加新功能。

TextField 中的字符识别

在 iOS 上使用 TextField 时,用户将自动看到一个使用设备摄像头识别字符并将其插入字段的选项。



如果没有社区成员 luckysmg(作者)和 tgucio(审阅者)的贡献,这个功能是不可能实现的。 这个功能是 1000 行代码和 70 次提交的成果,连接了引擎和框架! 谢谢你!

平台自适应对话框

AlertDialog 中添加了自适应构造函数以及自适应函数 showAdaptiveDialog,以根据当前平台显示 Material 或 Cupertino 对话框。

现在使用 AlertDialog.adaptive() 在 iOS 上使用 CupertinoAlertDialog 小部件:


以及 Android 上的 Material AlertDialog。


CupertinoDatePicker 带有月份和年份

向 CupertinoDatePicker 添加monthYear 模式。



Cupertino(iOS 风格)格纹收音机

useCheckmarkStyle 属性已添加到 CupertinoRadio 中。 这还允许 Radio.adaptive 和 RadioListTile.adaptive 小部件控制它们是否在 iOS 上使用复选标记样式。



Material 小部件的更多自定义选项

进行了多项改进,可以更轻松地自定义 Material 小部件的设计:

您现在可以使用 InputDecoration 的 error 属性(而不是字符串)来自定义文本字段上显示的错误小部件:



您现在可以使用materialGapSize 属性自定义ExpansionPanelList 中的间隙



  • 您现在可以使用 NavigationDrawer 上的tilePadding 属性自定义填充

  • 这使得在所有不同状态下定制芯片的颜色成为可能。


    Elevated Chips

    根据 Material 3 规范添加了 FilterChip.elevated、ChoiceChip.elevated 和 ActionChip.elevated 变体。



    onSubmited 到 SearchBar

    当用户完成文本输入并按下键盘上的“完成”按钮时,允许启动不同的操作。

    BaseTapAndDrag手势识别器

    为一系列类添加了基类,其中包括对点击 + 平移 (TapAndPanGestureRecognizer) 和点击 + 水平拖动 (TapAndHorizontalDragGestureRecognizer) 的支持。 这些类已用于实现本机文本字段手势。 然而,它们也非常适合其他用例 - 例如,使用双击 + 垂直拖动手势缩放小部件。

    应用程序生命周期变化

    应用程序生命周期监听器

    添加了 AppLifecycleListener 类,用于侦听应用程序生命周期中的更改,并响应退出应用程序的请求。



    滚动

    2D滚动基础

    此版本的 Flutter 还包含构建二维滚动小部件的基础,这意味着需要构建一堆新类,包括:

    ChildVicinity,类似于一维滚动视图中索引的表示,表示二维中子项的相对位置。

    TwoDimensionalChildDelegate,类似于 SliverChildDelegate,具有同样相似的子类:TwoDimensionalChildBuilderDelegate 和 TwoDimensionalChildListDelegate

    TwoDimensionalScrollView,一个抽象基类,创建TwoDimensionalScrollable和TwoDimensionalViewport,与一维ScrollView匹配相同的模型。

    RenderTwoDimensionalViewport,最后是在二维中布局框子项的主力。

    二维滚动还带来了一些新的交互,包括对角滚动。 请参阅 DiagonalDragBehavior 了解新的交互类型,并在 TwoDimensionalScrollView 或 TwoDimensionalScrollable 上配置它们。

    我们进行了一项用户研究,以便为开发人员奠定基础,使其能够在向各个方向滚动时构建他们可以想象的任何东西。 查看在这个 DartPad 中用大约 200 行代码实现的简单、延迟加载、二维网格的示例!

    Flutter 团队已经开始在此框架之上构建二维滚动小部件,即将在two_Dimensions_scrollables 包中推出。

    新 slivers

    Flutter 3.13 带来了一组新的 slivers,用于组合独特的滚动效果。

    SliverMainAxisGroup 和 SliverCrossAxisGroup 都支持将多个 sliver 排列在一起。 在主轴中,这可以创建的一个效果是粘性标题,允许在每组条子滚动时将固定的标题推出视图之外。

    交叉轴分组允许条子在视口中并排排列,(也是新的)小部件(如 SliverCrossAxisExpanded 和 SliverConstrainedCrossAxis)能够确定交叉轴中每个分组条子的空间分配。

    sliver 库的另一个新功能是 DecoratedSliver,与 DecoratedBox 类似。 这允许用户用装饰来装饰一个条子,甚至可以是一个条子组。



    无障碍

    辅助功能更新

    为 CupertinoSwitch 添加了 onOffSwitchLabels 辅助功能属性以显示 I/O 标签


    平台

    安卓

    新的支持目标

    在此版本中,Flutter 现在支持针对 Android 14/ API 34。虽然我们仍在开发 Android 14 中的一些新功能(即预测性后退导航),但我们已针对新的 Android SDK 彻底测试了此版本,并优先修复任何相关问题 您可能会发现的问题。

    iOS系统

    减少 iOS 上的旋转失真

    当 iOS 屏幕旋转时,Flutter 应用程序以前会遇到一些看起来与本机 iOS 应用程序不同的扭曲。 我们做了一些修改来减少失真:


    重命名 Runner

    创建 Flutter iOS 应用程序时,会在 /ios 文件夹中创建 Runner Xcode 项目和 Xcode 工作区。 现在,您可以重命名工作区或项目,这样您就不会得到运行者列表。



    为 iOS 17 和 Xcode 15 做准备

    随着 iOS 17 和 Xcode 15 即将发布,希望使用此工具链进行开发的用户将需要使用 Flutter 3.13。 此外,在下载 Xcode 15 时,请确保还下载了 iOS 17 模拟器。

    游戏

    Flutter 游戏更新

    我们于 2022 年推出了 Flutter 休闲游戏工具包,其中包含游戏模板、教程、文档、社区空间和 GCP/Firebase/Ad 积分,以帮助 Flutter 开发者快速启动游戏开发。 从那时起,已经有数以万计的游戏使用 Flutter 发布! 自推出以来,我们积极与 Flutter 游戏开发者互动并进行调查,以了解如何改进游戏工具包。 几乎所有人都提到需要更多资源和示例代码来帮助他们更好地设计、开发游戏并从中获利。

    今天,我们发布了 Flutter Games 网页的新更新,其中包含视频资源轮播和新游戏,供您在使用 Flutter 进行构建时了解。 我们将在接下来的几个月内对该工具包进行一些新的更新,并提供额外的资源和示例来启动您的游戏开发之旅。

    作为第一步,我们于 2023 年 7 月与 AdMob 合作,共同举办了专门针对 Flutter 游戏开发者的独家用户体验设计和盈利研讨会。 约 100 名开发人员通过现场互动网络研讨会加入了我们,并对会议给出了 4.6/5.0 的满意度评分。 我们希望尽快总结研讨会内容并与大家更广泛地分享这些见解。

    我们正在积极致力于更多更新,敬请期待! 如果您已经在使用游戏工具包,并且愿意向我们发送未来改进的想法,请随时发送电子邮件至 flutter-games@google.com。

    工装

    开发工具

    新的开发工具功能

    我们对 DevTools 的性能和可用性进行了改进,包括:

    我们在导航栏上添加了一个新的溢出菜单,以处理无法立即显示选项卡列表的情况。



    我们在“内存”选项卡上添加了类类型的图例。

    此外,我们还使 CPU 分析器中的树表滚动变得更快、更流畅。 在调试器中,我们将文件搜索速度提高了 5 倍。


    重大变更和弃用

    重大变化

    下一版本默认Material 3

    我们很高兴地宣布,在下一个 Flutter 稳定版本中,我们计划将 ThemeData useMaterial3 默认值从 false 更改为 true。 换句话说,应用程序将默认获取 Material 3 颜色、文本样式和其他视觉效果。

    Material 3 演示应该有助于预览 M2 和 M3 之间的差异。

    Android 支持的平台

    Flutter 不再支持 Android Jelly Bean API 级别(16、17 和 18)。 好消息是,大多数应用程序应该默认迁移到这个新的 minSdkVersion。

    但是,如果您没有自动迁移,可能是因为您对模块级别的 build.gradle 进行了更改,并且您可能需要手动增加 minSdkVersion。 要进行更新,请从 Flutter 项目的根目录中找到模块级别的 build.gradle。 它通常位于 <您的项目>/android/app/build.gradle。 将 minSdkVersion 版本提高到 19。如果您看到 flutter.minSdkVersion 并且它至少为 19,那么您的最小值设置正确。

    默认情况下,Flutter 插件不会迁移,因此插件作者应更新位于 /android/build.gradle 的顶级 build.gradle 文件中的 minSdkVersion。

    变更列表和迁移指南

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

    一如既往,非常感谢社区贡献测试,他们帮助我们识别这些重大变化。 要了解更多信息,请查看 Flutter 的重大变更政策。

    贡献

    Flutter 存储库优先级和分类


    在过去的几个月里,我们对我们的优先事项(P0-P3)采用了一套新的定义。 这使我们更符合大多数其他开源项目使用的定义,并简化了我们必须就 bug 的重要性做出的决策——我们现在只有 4 个类别,而不是 7 个类别。希望这也能帮助我们进行更多沟通 有效地与那些提交错误然后想知道问题何时会得到修复的人一起!

    我们还为我们的团队引入了一个新的分类计划,我们希望这将使问题更难被解决。 如果您活跃在我们的问题数据库中,您可能会看到我们的新机器人评论以及添加或删除标签:


    该机器人还与我们的 Discord 集成,帮助我们掌握 GitHub 上发生的事情。 我们希望从长远来看,它能让我们提高工作效率,但请耐心等待我们适应新系统!

    结论

    在本公告即将结束时,我想承认,如果没有我们出色的社区的努力,我们就不会取得今天的成绩!

    有关此版本中包含的 PR 的完整列表,请查看此版本的发行说明和更改日志部分。

    Flutter 3.13 现已发布稳定版,其中包含 Dart 3.1。 要开始使用这些最新更新,只需进行 flutter 升级即可。

    很快就会再次见到大家!

    展开阅读全文

    页面更新:2024-03-01

    标签:保真度   工具包   条子   基准   部件   应用程序   属性   图形   性能   版本   用户

    1 2 3 4 5

    上滑加载更多 ↓
    推荐阅读:
    友情链接:
    更多:

    本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

    © CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
    闽公网安备35020302034903号

    Top