Flutter 3 是咱们正式为全渠道供给支撑的一个重量级里程碑,距离它的发布仅过去了三个月,今天让咱们有请 Flutter 3.3 正式版!近三个月咱们并没有怠慢更新迭代的速度——自 Flutter 3 发布以来,咱们现已为 Flutter 兼并了 5687 个拉取请求。

本次更新带来了 Flutter Web 渠道、桌面端渠道、文本处理的功用和其他更新内容。

一起咱们也会介绍 go_routerpackage、DevTools (开发者东西) 和 VS Code 扩展相关的更新内容。与咱们一起阅览详细了解它们吧!

结构更新

大局挑选

到现在为止,Flutter 在 Web 上的文本挑选交互仍然没有到达预期。与 Flutter 运用不同,原生的 Web 运用会将每个节点构建为树形结构。在传统的 Web 运用中你能够轻松用拖动手势来挑选网页上的节点,这在 Flutter Web 运用中无法轻松达到。

从今天起,全部都发生了改变。咱们引入了 SelectionAreawidget,它的子 widget 现已能够进行随意挑选!

Flutter 3.3 正式发布

只需运用 SelectionArea 包裹住路由显现的内容 (例如 Scaffold),Flutter 会替你处理好全部,你便能够享受到这项强力的新特性。

想要更全面深化地了解这个绝妙的新功用,请拜访 SelectionArea API 页面。

触控板操作

Flutter 3.3 优化了针对触控板的支撑。Flutter 不只供给了更丰厚且顺滑的操控,一起也减少了几种特定情况的误触。若你想了解误触的示例,你能够检查 Flutter 实用教程页面。将页面翻滚到底部的 DartPad,并跟随以下进程进行操作:

  1. 缩小窗口让上半部分呈现翻滚条
  2. 将指针悬停在上半部分
  3. 运用触控板进行翻滚
  4. 在 Flutter 3.3 曾经,运用触控板翻滚会拖动元素,由于 Flutter 将模仿的手势事情进行了下发
  5. 从 Flutter 3.3 开端,运用触控板翻滚会正确地翻滚列表,由于 Flutter 会传递「翻滚」事情,卡片不会识别这些事情,而列表会进行对应的处理

想了解更多信息,请拜访 Flutter 触控板手势)的规划文档,而且检查以下的拉取请求:

  • PR 89944: 在结构中支撑触控板手势
  • PR 31591: iPad 上的触控版手势
  • PR 34060: ChromeOS/Android 触控板手势
  • PR 31594: Win32 的触控板手势
  • PR 31592: Linux 的触控板手势
  • PR 31593: Mac 上的触控板手势

随手写功用

感谢来自社区成员 fbcouch 的出彩贡献。Flutter 现在支撑在 iPadOS 上运用 Apple Pencil 进行 随手写 输入。这项功用已默许在 CupertinoTextFieldTextFieldEditableText上启用。只需求将 Flutter 升级到 3.3 就能够为你的用户带来这项新功用。

Flutter 3.3 正式发布

文本输入

为了优化富文本修改的支撑,本次更新咱们增加了从底层渠道的 TextInputPlugin 接收愈加精细化的更新的能力。曾经 TextInputClient 只能传递新的修改状况,而不能细分新旧状况之间的改变量,TextEditingDeltaDeltaTextInputClient 填充了这部分的信息差。经过拜访这些改变量,你能够为输入区域构建自定义的款式,这个区域会在你输入时翻开和缩短。想要了解更多信息,你能够检查 富文本修改器示例。

Material Design 3 支撑

Flutter 团队继续地在整合更多 Material Design 3 的组件到 Flutter 中。本次更新包含了 IconButton的中等和扩展款式。

想要跟踪 Material Design 3 的整合进度,你能够在 GitHub 上检查 将 Material 3 带到 Flutter。

IconButton 示例

Flutter 3.3 正式发布

Chip 示例

Flutter 3.3 正式发布

中型和大型 AppBar 示例

Flutter 3.3 正式发布

桌面端渠道

Windows

在从前构建 Windows 桌面运用时,运用的版别只能在文件中进行设置。这样的行为与其他渠道上设置版别的行为并不共同。

现在 Windows 桌面运用的版别能够经过 pubspec.yaml和构建参数进行设置。它有助于当你的运用推送了更新时,在运用中为你的用户供给运用更新功用。

想要了解更多关于设置 Windows 桌面运用版别号的内容,请检查 文档。Flutter 3.3 前创建的项目需求手动进行调整才能运用这项功用。

Packages 更新

go_router 发布

当你的运用包含杂乱的导航需求时,它可能会让你晕头转向。为了扩展 Flutter 的导航 API,团队发布了新版别的 go_router package,让你在一切渠道的路由逻辑规划变得愈加简洁。

go_router package 由 Flutter 团队进行保护,经过声明式和基于 URL 的 API 让导航和 deep links 的处理变得愈加轻松。最新的 5.0 版别让运用能够经过异步代码进行重定向,其中还包含了一些 破坏性改动。

更多内容请检查官方文档:路由和导航。

VS Code 插件增强

VS Code 的 Flutter 扩展也带来了增加依靠的更新。你能够运用Dart: Add Dependency命令加上逗号一次性增加多个依靠。

Flutter 3.3 正式发布

你能够检查以下内容了解自上一个 Flutter 安稳版别发布以来一切 VS Code 的 Flutter 插件的更新:

  • VS Code extensions v3.46
  • VS Code extensions v3.44
  • VS Code extensions v3.42

Flutter 开发者东西更新

自前次 Flutter 发布安稳版以来,DevTools 相同也包含数次更新,包含数据表格展现的用户体会和功用的提升,还有在翻滚事情的长列表时减少卡顿 (#4175。

以下是自 Flutter 3.0 以来 DevTools 各个版别更新的公告内容:

  • Flutter DevTools 2.16.0 发行注记
  • Flutter DevTools 2.15.0 发行注记
  • Flutter DevTools 2.14.0 发行注记

功用改进

Raster 缓存改进

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

随着 新增的 ui.ImmutableBuffer.fromAsset 的引入。这个加载进程一起也会愈加快速,由于它会绕过之前方法通道所需的额外调度的开支。特别是在咱们的基准测试中,图片的加载速度提升为原先的 2 倍左右。

Flutter 3.3 正式发布

更多相关信息,请检查官方文档:增加 ImageProvider.loadBuffer。

结构安稳性

禁用 iOS 内存指针紧缩

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

尽管禁用了指针紧缩会增加 Dart 对象消费的内存,可是它也恢复了 Flutter 运用可用的非 Dart 部分的内存,总体来说是更适宜的方案。

运用能够增加最大虚拟内存的分配量,但这项操作仅在较新的 iOS 版别上可用,并不适用于其他 Flutter 支撑的 iOS 设备版别。当咱们能够在一切位置运用这项优化时,咱们会重新进行评估。

API 改进

PlatformDispatcher.onError

在从前的版别中,你需求手动装备一个自定义的 Zone 来捕获运用的一切反常和错误。然而,自定义的 Zone 并不适用于 Dart 中心库中的一些优化,会减慢运用的发动时刻。在本次更新中,你能够经过设置 PlatformDispatcher.onError 回调来捕获一切的错误和反常,代替自定义的 Zone。更多内容请检查现已更新的官方文档:在 Flutter 里处理错误。

FragmentProgram 更新

用 GLSL 编写的而且在 pubspec.yamlshader: 部分声明的片段着色器 (Fragment shader) 现在会自动编译成引擎能够正确识别的格局,而且自动绑定为运用的资源。有了这项改动,开发者无需再运用三方东西编译着色器。在未来,引擎的 FragmentProgram API 可能只能接受来自 Flutter 的东西构建。目前咱们还没运用这项更改,但如 FragmentProgram API 改进支撑的规划文档 中所方案的,有可能在未来实行。

想要了解更多内容,你能够检查这个 Flutter 着色器示例。

布局小数处理

在从前的版别中,Flutter 引擎会将组成层精准地对齐像素,用于提升 Flutter 在旧款 iPhone (32 位) 上的烘托功用。而在咱们增加桌面渠道的支撑后,咱们注意到这项操作会导致肉眼可见的颤动,由于桌面渠道的是设备像素比通常会更低。例如在较低的 DPR 设备上,提示会在渐入时产生的明显颤动。在确认更新的 iPhone 设备并不需求这项优化后,咱们已从 Flutter 引擎中将其移除,来改进桌面端的烘托保真度。

此外咱们还发现,将这些像素对齐移除后,从前在黄金镜像测试 (golden image test) 时分呈现的纤细烘托差异也变得更安稳了。

中止支撑 32 位 iOS

在咱们发布 Flutter 3.0 时曾经提到,由于运用量的减少,3.0 版别是最终一个支撑 32 位 iOS 设备以及 iOS 9 和 10 的版别。这个改动将会影响 iPhone 4S、iPhone 5、 iPhone 5C 以及第 2、3、4 代 iPad 设备。Flutter 3.3 安稳版以及之后的安稳版将不再支撑 32 位 iOS 设备以及 iOS 9 & 10。这意味着运用 Flutter 3.3 及之后构建的运用将不能再上述设备上运转。

macOS 10.11 和 10.12 的支撑进入结尾

在行将到来的 2022 第四季度的正式版发行方案中,咱们将放弃对 macOS 版别 10.11 和 10.12 的支撑。这意味着在此之后的 Flutter SDK 安稳版将不能在这些版别上运转,Flutter 最低支撑的 macOS 版将上升为 10.13 High Sierra。

中止支撑 Bitcode

行将发布的 Xcode 14 将不再支撑提交含有 Bitcode 的 iOS 运用,这个版别的 Xcode 会对开启了 bitcode 的项目宣布警告。因此 Flutter 将会在未来的安稳发行版中移除对 bitcode 的支撑。咱们不希望影响到许多的开发者,因此默许情况下,Flutter 将不会开启 bitcode。然而,假如你手动在 Xcode 项目中开启了 bitcode,请赶快在升级到 Xcode 14 之后封闭它。

你能够翻开 ios/Runner.xcworkspace 并在 build setting 中将 Enable Bitcode 设置为 No 以封闭它。混合开发运用能够在宿主工程的 Xcode 项目中封闭它。

Flutter 3.3 正式发布

你能够查阅 Apple 文档了解更多关于 bitcode 分发的内容。

结语

Google Flutter 团队非常感谢社区中的每一位成员们为了让 Flutter 的体会变得更好所付出的一切尽力,咱们期待在已完结的工作上继续尽力,而且咱们始终重视咱们最重要最宝贵的财富——社区中的每一位成员!


原文链接:

medium.com/flutter/wha…

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

中文链接: flutter.cn/posts/whats…