乐趣区

关于flutter:Flutter-33-正式发布

Flutter 3 是咱们正式为全平台提供反对的一个重量级里程碑,间隔它的公布仅过来了三个月,明天让咱们有请 Flutter 3.3 正式版!近三个月咱们并没有加快更新迭代的速度——自 Flutter 3 公布以来,咱们曾经为 Flutter 合并了 5687 个拉取申请。

本次更新带来了 Flutter Web 平台、桌面端平台、文本处理的性能和其余更新内容。

同时咱们也会介绍 go_router package、DevTools (开发者工具) 和 VS Code 扩大相干的更新内容。与咱们一起浏览具体理解它们吧!

框架更新

全局抉择

到当初为止,Flutter 在 Web 上的文本抉择交互依然没有达到预期。与 Flutter 利用不同,原生的 Web 利用会将每个节点构建为树形构造。在传统的 Web 利用中你能够轻松用拖动手势来抉择网页上的节点,这在 Flutter Web 利用中无奈轻松达成。

从今天起,所有都产生了变动。咱们引入了 SelectionArea widget,它的子 widget 现已能够进行随便抉择!

只需应用 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 触控板手势.pdf “Flutter 触控板手势 ”)) 的设计文档,并且查看以下的拉取申请:

  • PR 89944: 在框架中反对触控板手势
  • PR 31591: iPad 上的触控版手势
  • PR 34060: ChromeOS/Android 触控板手势
  • PR 31594: Win32 的触控板手势
  • PR 31592: Linux 的触控板手势
  • PR 31593: Mac 上的触控板手势

顺手写性能

感激来自社区成员 fbcouch 输出。这项性能已默认在 CupertinoTextFieldTextFieldEditableText 上启用。只须要将 Flutter 降级到 3.3 就能够为你的用户带来这项新性能。

文本输出

为了优化富文本编辑的反对,本次更新咱们减少了从底层平台的 TextInputPlugin 接管更加精细化的更新的能力。以前 TextInputClient 只能传递新的编辑状态,而不能细分新旧状态之间的变动量,TextEditingDeltaDeltaTextInputClient 填充了这部分的信息差。通过拜访这些变动量,你能够为输出区域构建自定义的款式,这个区域会在你输出时开展和膨胀。想要理解更多信息,你能够查看 富文本编辑器示例。

Material Design 3 反对

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

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

IconButton 示例

Chip 示例

中型和大型 AppBar 示例

桌面端平台

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 稳固版本公布以来所有 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 倍左右。

更多相干信息,请查看官网文档:增加 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 改良反对的设计文档.pdf “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 我的项目中敞开它。

你能够查阅 Apple 文档 理解更多对于 bitcode 散发的内容。

结语

Google Flutter 团队非常感谢社区中的每一位成员们为了让 Flutter 的体验变得更好所付出的所有致力,咱们期待在已实现的工作上持续致力,并且咱们始终器重咱们最重要最贵重的财产——社区中的每一位成员!


原文链接 : 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

退出移动版