部分原文链接 medium.com/flutter/wha…

又到了一季度一次的更新时刻,本次更新依然不是 4.0,3.13 更新核心仍是以修复为主,主要是对 Impeller 进行了优化,Android 上 Impeller 还没完工,可是 MacOS 上 Impeller 现已能够测验了,别的新增了不少有意思的控件和API,其间就有折叠设屏适配等支撑

Impeller

iOS 功用改善

3.13 优化了 Impeller 在 iOS 上的功用,iOS 上的 Impeller 现在不仅具有更低的延迟(经过完全消除着色器编译卡顿),而且在某些基准测验中还具有优秀的功用。

特别是在 flutter/gallery 功用基准测验中,平均帧光栅化时刻现在约为 Skia 的一半。

Flutter 3.13 更新,快来看看有什么新特性

如图是 iPhone 11 上 Flutter Gallery 过渡功用基准中平均帧光栅化时刻的改善。

Impeller 本次优化得益于:

  • 启用脏区域办理和部分重绘(flutter/engine#40959)
  • 完结并发烘托通道编码(flutter/engine#42028)
  • 对文本烘托进行了大量改善(flutter/engine#41290、flutter/engine#41780、flutter/engine#42417)
  • 增加了 fast path,以避免昂贵的 convex shapes 细分调用(flutter/engine#41834)
  • 开端运用 compute shaders 进行一些操作(flutter/engine#42192)
  • 剔除越界制作操作(flutter/engine#41606)

保真度改善

在 3.10 中运用 Impeller 时能够运用广色域色彩才能,在听取并处理用户的反应后,现在运用 Impeller 时,广色域色彩设置现已成为 iOS 上的默许色彩。

Android 上 Impeller 的进展更新

Impeller 的 Vulkan 现在依然在推动,但它还没到达官方预览的质量水平,现在方案是在今年晚些时候以安稳版别的形式进入 Android 版 Impeller 的预览支撑。

虽然 Android 上的 Impeller 还没完全准备好进行预览,但 OpenGL 和 Vulkan 得益于在曩昔一年中对 Impeller 的 HAL 所做的许多优化,Android 的平均帧光栅化时刻在 flutter/gallery 转换功用基准测验中也得到了明显改善。

进一步的改善正在进行中,后续 Android 上的预览能够到达高质量。

Flutter 3.13 更新,快来看看有什么新特性

macOS 上的 Impeller

在 3.10 中 Impeller 在 iOS 上默许启用,现在 macOS 的 Impeller 也能够预览运用,经过配置:

<key>FLTEnableImpeller</key>
<true />

想要在 macOS 上体会 Impeller?能够从 Mac App Store 安装 Wonderous :apps.apple.com/us/app/wond…

Flutter 3.13 更新,快来看看有什么新特性

新引擎 API

支撑折叠屏设备

为了更好地支撑可折叠设备,本次增加了一个新的 API 来匹配显现器的各种特点。

新的FlutterView.display 回来一个 Display 对象,Display 对象会陈述显现器的物理尺度、设备像素比和刷新率:


  @override
  void didChangeMetrics() {
    final ui.Display? display = _display;
    if (display == null) {
      return;
    }
    if (display.size.width / display.devicePixelRatio < kOrientationLockBreakpoint) {
      SystemChrome.setPreferredOrientations(<DeviceOrientation>[
        DeviceOrientation.portraitUp,
      ]);
    } else {
      SystemChrome.setPreferredOrientations(<DeviceOrientation>[]);
    }
  }

Framework

Material

本次对 Material Framework 进行了多项改善

    1. 提供更多渠道适应性
    1. 答应更多自定义
    1. 增加新功用。

TextField 中的字符辨认

在 iOS 上运用 TextField 时,用户会自动看到一个运用设备摄像头辨认字符,并将其刺进字段的选项。

Flutter 3.13 更新,快来看看有什么新特性

如果没有社区成员 luckysmg(作者)和 tgucio(审理者)的奉献,这个功用是不可能完结,这个功用是 1000 行代码和 70 次提交的作用:#34751和#96637

渠道自适应对话框

AlertDialog 中增加了自适应构造函数以及自适应函数 showAdaptiveDialog,会依据当时渠道显现 Material 或 Cupertino 对话框。

现在运用 AlertDialog.adaptive() 在 iOS 上运用CupertinoAlertDialog

Flutter 3.13 更新,快来看看有什么新特性

Android 上的 MaterialAlertDialog。

Flutter 3.13 更新,快来看看有什么新特性

CupertinoDatePicker 带有月份和年份

CupertinoDatePicker 增加了 monthYear 模式。

Flutter 3.13 更新,快来看看有什么新特性

Cupertino (iOS-style) check styled radio

useCheckmarkStyle 特点现在现已支撑到 CupertinoRadio ,支撑 Radio.adaptive 和 RadioListTile.adaptive 控制它们是否在 iOS 上运用复选标记款式。

Flutter 3.13 更新,快来看看有什么新特性

Material 更多自定义选项

进行了多项改善,能够更轻松地自定义 Material 控件的规划:

  • 现在能够运用 InputDecoration 的 error 特点(而不是字符串)来自定义文本字段上显现的错误控件:

Flutter 3.13 更新,快来看看有什么新特性

  • 现在能够向 ButtonSegment 增加工具提示:

Flutter 3.13 更新,快来看看有什么新特性

  • 现在能够运用 materialGapSize 特点自定义ExpansionPanelList 中的空隙

Flutter 3.13 更新,快来看看有什么新特性

  • 现在能够自定义 Switch 的 trackOutlineWidth

Flutter 3.13 更新,快来看看有什么新特性

  • 现在能够运用 NavigationDrawer 上的 tilePadding 特点自定义填充

Flutter 3.13 更新,快来看看有什么新特性

  • 能够运用 TabBar 的对齐特点挑选怎么对齐选项卡

Flutter 3.13 更新,快来看看有什么新特性

MaterialState color for chips

能够在所有不同状态下定制 chips 的色彩。

Flutter 3.13 更新,快来看看有什么新特性

Elevated Chips

依据 Material 3 规范增加了 FilterChip.elevated、ChoiceChip.elevated 和 ActionChip.elevated 。

m3.material.io/components/…

Flutter 3.13 更新,快来看看有什么新特性

onSubmited 到 SearchBar

当用户完结文本输入并按下键盘上的“完结”按钮时,答应发动不同的操作。

BaseTapAndDrag 手势辨认器

为一系列类增加了对应基类,其间包含对点击 + 平移 (TapAndPanGestureRecognizer) 和点击 + 水平拖动 (TapAndHorizo​​ntalDragGestureRecognizer) 的支撑。

这些类能够用于完结 native 文本字段手势,它们也十分适合其他用如:运用双击 + 笔直拖动手势缩放控件。

App Lifecycle Changes

AppLifeCycleListener

#123274 增加了 AppLifecycleListener 类,用于侦听运用生命周期中的更改,并响应退出运用的恳求,详细可见:《Flutter 小技巧之 3.13 全新生命周期 AppLifecycleListener》

Flutter 3.13 更新,快来看看有什么新特性

翻滚

TwoDimensional scrolling foundation

3.13 的 Flutter 还包含构建 TwoDimensional 的才能,这意味着需求构建一堆新类,包含:

  • ChildVicinity,类似于一维翻滚视图中索引的表明,表明子级在二维中的相对方位。
  • TwoDimensionalChildDelegate,类似于 SliverChildDelegate ,具有相同类似的子类:TwoDimensionalChildBuilderDelegate 和 TwoDimensionalChildListDelegate
  • TwoDimensionalScrollView,一个笼统基类,创立 TwoDimensionalScrollable 和TwoDimensionalViewport, 与一维 ScrollView 匹配相同的模型。
  • RenderTwoDimensionalViewport,最终是在二维中布局框子项的主力。

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

能够在 DartPad :dartpad.dev/?id=4424936… 参考这个用大约 200 行代码完结的简单、延迟加载、二维网格的示例。

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

从 Demo 看现在用起来还不是很方便,Grid 需求经过 RenderTwoDimensionalViewport 去承继完结

New slivers

Flutter 3.13 带来了一组新的 slivers,用于组合独特的翻滚作用。

SliverMainAxisGroup 和 SliverCrossAxisGroup 都支撑将多个 sliver 摆放在一起,在主轴中,能够创立的一个作用是粘性标题,答应在每组便条翻滚时将固定的标题推出视图之外。

穿插轴分组答应 sliver 在视口中并排摆放,如 SliverCrossAxisExpanded 和SliverConstrainedCrossAxis 能够确认穿插轴中每个分组便条的空间分配。

sliver 库的另一个新功用是 DecoratedSliver,类似于 DecoratedBox,这答运用户用Decoration 来装饰一个 sliver,甚至能够是一个 sliver 组。

在这个 DartPad:dartpad.dev/?id=6e2b724… 示例中查能够看到所有这些新的 slivers 的实际运用。

Flutter 3.13 更新,快来看看有什么新特性

无障碍

辅助功用更新

  • 为 CupertinoSwitch 增加了 onOffSwitchLabels 辅助功用特点以显现 I/O 标签

  • 增加了 FocusSemanticEvent。但需求谨慎运用它,由于它可能会破坏用户对焦点怎么工作的期望。

  • IconButton 的 isSelected 现在可提供屏幕阅读器运用#127145。

渠道

Android

New support targets

在此版别中,Flutter 现在支撑 Android 14/ API 34,虽然仍在开发 Android 14 中的一些新功用(即预测性回来导航),但已针对新的 Android SDK 完全测验了此版别。

iOS

削减 iOS 上的旋转歪曲

当 iOS 屏幕旋转时,Flutter 运用以前会遇到一些看起来与native iOS 运用不同的歪曲,本次做了一些修改来削减失真#16322:

Flutter 3.13 更新,快来看看有什么新特性

Renaming Runner

创立 Flutter iOS 运用时,会在该文件夹中创立 Runner/iosXcode project 和 workspace, 现在能够重命名了,这样就不会都是 Runners。

Flutter 3.13 更新,快来看看有什么新特性

为 iOS 17 和 Xcode 15 做准备

随着 iOS 17 和 Xcode 15 即将发布,对应工具链支撑需求运用 Flutter 3.13,此外鄙人载 Xcode 15 时,请保证下载了 iOS 17 模拟器。

游戏

Flutter 游戏更新

今天,Flutter 官方发布了 Flutter Games Web Page 的新更新,其间包含视频资源轮播和新游戏,接下来会在几个月内对该工具包进行一些新的更新,并提供额外的资源和示例来发动开发者新的游戏开发之旅。

作为第一步,Flutter 在 2023 年 7 月与 AdMob 协作,共同举办了专门针对 Flutter 游戏开发者的独家用户体会规划和盈余研讨会,约 100 名开发人员经过现场互动网络研讨会,并对会议给出了 4.6/5.0 的满意度评分。

Tooling

Dev Tools

新的开发工具功用

本次对 DevTools 的功用和可用性进行了改善,其间包含:

在导航栏上增加了一个新的溢出菜单,以处理无法当即显现选项卡列表的情况。

Flutter 3.13 更新,快来看看有什么新特性

在“内存”选项卡上增加了 class 类型的图例。

Flutter 3.13 更新,快来看看有什么新特性

此外,还使 CPU 分析器中的树表翻滚变得更快、更流通。在调试器中,咱们将文件搜索速度进步了 5 倍。

要了解更多信息,请查看 DevTools 2.25.0 和 DevTools 2.24.0 的相关信息。

严重改变和弃用

严重改变

下一版别默许 Material 3

鄙人一个 Flutter 安稳版别中,Flutter 方案将 ThemeData useMaterial3 默许值从 false 更改为 true,换句话说,运用将默许完结 Material 3 色彩、文本款式和视觉作用。

经过 Material3 的 Demo:flutter.github.io/samples/web…) 有助于对比 M2 和 M3 之间的差异。

Android 渠道

Flutter 不再支撑 Android Jelly Bean API 等级(16、17 和 18)

改变列表和搬迁攻略

此版别中的严重更改包含已弃用的 API,这些 API 在 v3.10 发布后现已标识为过期。

要查看所有受影响的 API 以及其他上下文和搬迁攻略,请参阅 310 弃用攻略,其间许多都由 Flutter Fix 支撑,包含 IDE 中的快速修复,以及运用 dart fix 命令批量运用。

更多可见:docs.flutter.dev/release/rel…

奉献

Flutter 存储库优先级和分类

在曩昔的几个月里,Flutter team 对优先事项(P0-P3)采用了一套新的定义,以契合大多数其他开源项目运用的定义,并简化了 bug 的决议计划等级——现在只要 4 个类别,而不是 7 个类别。

github.com/flutter/flu…

别的的团队引入了一个新的分类方案,希望这将使问题更简单被处理。

Flutter 3.13 更新,快来看看有什么新特性

该机器人还与 Discord 集成,协助团队把握 GitHub 上发生的事情,从长远来看,它能让团队进步工作效率。

最终

总的来看,本来更新应该不会有大坑,Impeller 应该能够开端投入生产了,新的 Api 里最有意思的应该仍是多等级翻滚的支撑,同时拓宽了 sliver 的支撑类型,能够在必定程度简化多方向滑动和组合的需求。

如果对于 3.13 不放心,老规矩,主张等 3.13.6 再更新。