Flutter 3.3 正式发布

Flutter 3.3 正式发布_第1张图片

flutter 3.3正式发布,原文链接

https://medium.com/flutter/whats-new-in-flutter-3-3-893c7b9af1ff

本地化: CFUG 团队: @AlexV525、@chenglu、@Vadaski、@Nayuta403

中文链接: https://flutter.cn/posts/whats-new-in-flutter-3-3

flutter 3.3正式发布,几个我比较感兴趣的点整理如下


go_router 发布

当你的应用包含复杂的导航需求时,它可能会让你晕头转向。为了扩展 Flutter 的导航 API,团队发布了新版本的 go_router package[17],让你在所有平台的路由逻辑设计变得更加简洁。

go_router package 由 Flutter 团队进行维护,通过声明式和基于 URL 的 API 让导航和 deep links 的处理变得更加轻松。最新的 5.0 版本让应用可以通过异步代码进行重定向,其中还包含了一些 破坏性改动 https://files.flutter-io.cn/flutter-design-docs/[Draft]Go_Router%205.0%20migration%20guide%20(PUBLICLY%20SHARED).docx

更多内容请查看官方文档:路由和导航http://flutter.cn/docs/development/ui/navigation。


性能改进

Raster 缓存改善

本次更新提升了加载资源图片的性能,减少了图片数据的拷贝和 Dart 垃圾回收 (GC) 的压力。先前在加载资源图片时,ImageProvider 需要复制多次压缩的数据。首先,打开图片时数据会被拷贝至原生的堆内存并向 Dart 暴露出结构数组。然后,数据会在结构数组转换至内置存储的 ui.ImmutableBuffer 时被再次拷贝。

随着 新增的 ui.ImmutableBuffer.fromAsset 的引入[27]。这个加载过程同时也会更加快速,因为它会绕过之前方法通道所需的额外调度的开销。特别是在我们的基准测试中,图片的加载速度提升为原先的 2 倍左右。


框架稳定性

禁用 iOS 内存指针压缩

在 Flutter 2.10 稳定版的发布中,我们为 iOS 启用了 Dart 的内存指针压缩优化。但是,Yeatse 在 GitHub 上提醒我们这项优化中包含了我们并未预料到的后果[29]。Dart 通过为堆保持一个大的虚拟内存来实现指针压缩。由于 iOS 上允许的总虚拟内存少于其他平台,因此其他例如 Flutter 插件之类的组件可持有的虚拟内存便减少了。

虽然禁用了指针压缩会增加 Dart 对象消费的内存,但是它也恢复了 Flutter 应用可用的非 Dart 部分的内存,总体来说是更合适的方案。

应用可以增加最大虚拟内存的分配量,但这项操作仅在较新的 iOS 版本上可用,并不适用于其他 Flutter 支持的 iOS 设备版本。当我们能够在所有位置使用这项优化时,我们会重新进行评估。


API 改进

PlatformDispatcher.onError

在先前的版本中,你需要手动配置一个自定义的 Zone 来捕获应用的所有异常和错误。然而,自定义的 Zone 并不适用于 Dart 核心库中的一些优化,会减慢应用的启动时间。在本次更新中,你可以通过设置 PlatformDispatcher.onError 回调来捕获所有的错误和异常,代替自定义的 Zone。更多内容请查看已经更新的官方文档:在 Flutter 里处理错误[30]。

FragmentProgram 更新

用 GLSL 编写的并且在 pubspec.yaml 的 shader: 部分声明的片段着色器 (Fragment shader) 现在会自动编译成引擎可以正确识别的格式,并且自动绑定为应用的资源。有了这项改动,开发者无需再使用三方工具编译着色器。在未来,引擎的 FragmentProgram API 可能只能接受来自 Flutter 的工具构建。目前我们还没应用这项更改,但如 FragmentProgram API 改进支持的设计文档[31] 中所计划的,有可能在未来实行。

想要了解更多内容,你可以查看这个 Flutter 着色器示例[32]。

布局小数处理

在先前的版本中,Flutter 引擎会将合成层精准地对齐像素,用于提升 Flutter 在旧款 iPhone (32 位) 上的渲染性能。而在我们添加桌面平台的支持后,我们注意到这项操作会导致肉眼可见的抖动,因为桌面平台的是设备像素比通常会更低。例如在较低的 DPR 设备上,提示会在渐入时产生的明显抖动。在确定更新的 iPhone 设备并不需要这项优化后,我们已从 Flutter 引擎中将其移除[33],来改善桌面端的渲染保真度。

此外我们还发现,将这些像素对齐移除后,先前在黄金镜像测试 (golden image test) 时候出现的细微渲染差异也变得更稳定了。

你可能感兴趣的:(flutter,flutter)