部分原文链接 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 的一半。
如图是 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 上的预览能够到达高质量。
macOS 上的 Impeller
在 3.10 中 Impeller 在 iOS 上默许启用,现在 macOS 的 Impeller 也能够预览运用,经过配置:
<key>FLTEnableImpeller</key>
<true />
想要在 macOS 上体会 Impeller?能够从 Mac App Store 安装 Wonderous :apps.apple.com/us/app/wond…
新引擎 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 进行了多项改善
-
- 提供更多渠道适应性
-
- 答应更多自定义
-
- 增加新功用。
TextField 中的字符辨认
在 iOS 上运用 TextField 时,用户会自动看到一个运用设备摄像头辨认字符,并将其刺进字段的选项。
如果没有社区成员 luckysmg(作者)和 tgucio(审理者)的奉献,这个功用是不可能完结,这个功用是 1000 行代码和 70 次提交的作用:#34751和#96637
渠道自适应对话框
AlertDialog 中增加了自适应构造函数以及自适应函数 showAdaptiveDialog,会依据当时渠道显现 Material 或 Cupertino 对话框。
现在运用 AlertDialog.adaptive() 在 iOS 上运用CupertinoAlertDialog
Android 上的 MaterialAlertDialog。
CupertinoDatePicker 带有月份和年份
CupertinoDatePicker 增加了 monthYear 模式。
Cupertino (iOS-style) check styled radio
useCheckmarkStyle 特点现在现已支撑到 CupertinoRadio ,支撑 Radio.adaptive 和 RadioListTile.adaptive 控制它们是否在 iOS 上运用复选标记款式。
Material 更多自定义选项
进行了多项改善,能够更轻松地自定义 Material 控件的规划:
- 现在能够运用 InputDecoration 的 error 特点(而不是字符串)来自定义文本字段上显现的错误控件:
- 现在能够向 ButtonSegment 增加工具提示:
- 现在能够运用 materialGapSize 特点自定义ExpansionPanelList 中的空隙
- 现在能够自定义 Switch 的 trackOutlineWidth
- 现在能够运用 NavigationDrawer 上的 tilePadding 特点自定义填充
- 能够运用 TabBar 的对齐特点挑选怎么对齐选项卡
MaterialState color for chips
能够在所有不同状态下定制 chips 的色彩。
Elevated Chips
依据 Material 3 规范增加了 FilterChip.elevated、ChoiceChip.elevated 和 ActionChip.elevated 。
m3.material.io/components/…
onSubmited 到 SearchBar
当用户完结文本输入并按下键盘上的“完结”按钮时,答应发动不同的操作。
BaseTapAndDrag 手势辨认器
为一系列类增加了对应基类,其间包含对点击 + 平移 (TapAndPanGestureRecognizer) 和点击 + 水平拖动 (TapAndHorizontalDragGestureRecognizer) 的支撑。
这些类能够用于完结 native 文本字段手势,它们也十分适合其他用如:运用双击 + 笔直拖动手势缩放控件。
App Lifecycle Changes
AppLifeCycleListener
#123274 增加了 AppLifecycleListener 类,用于侦听运用生命周期中的更改,并响应退出运用的恳求,详细可见:《Flutter 小技巧之 3.13 全新生命周期 AppLifecycleListener》
翻滚
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 的实际运用。
无障碍
辅助功用更新
-
为 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:
Renaming Runner
创立 Flutter iOS 运用时,会在该文件夹中创立 Runner/ios
Xcode project 和 workspace, 现在能够重命名了,这样就不会都是 Runners。
为 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 的功用和可用性进行了改善,其间包含:
在导航栏上增加了一个新的溢出菜单,以处理无法当即显现选项卡列表的情况。
在“内存”选项卡上增加了 class 类型的图例。
此外,还使 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…
别的的团队引入了一个新的分类方案,希望这将使问题更简单被处理。
该机器人还与 Discord 集成,协助团队把握 GitHub 上发生的事情,从长远来看,它能让团队进步工作效率。
最终
总的来看,本来更新应该不会有大坑,Impeller 应该能够开端投入生产了,新的 Api 里最有意思的应该仍是多等级翻滚的支撑,同时拓宽了 sliver 的支撑类型,能够在必定程度简化多方向滑动和组合的需求。
如果对于 3.13 不放心,老规矩,主张等 3.13.6 再更新。