Flutter 2.10 版已正式公布!尽管⾃ 上次稳固版本公布 以来还不到两个⽉,即便在这么短的工夫内,咱们也已解决和敞开了 1843 个 Issue,合并了来⾃寰球 155 位贡献者的 1525 个 PR。感激⼤家在 2021 年末的假期期间的出⾊⼯作。
咱们有⼏件令⼈兴奋的事件要发表,包含 Flutter 对 Windows ⽀持的重⼤更新、⼏项重⼤的性能改良、框架中图标和颜⾊的新⽀持以及一些⼯具改良等。此外,该版本还包含移除了 dev 渠道的更新、缩小对旧版 iOS 的⽀持以及几个简短的破坏性改变。让咱们开始吧!
应用 Flutter 构建 Windows 桌面利用反对曾经进入稳固阶段
⾸先,Flutter 2.10 版本带来了稳固的 Windows ⽀持,无需再通过 --enable-windows-desktop
标记来独自配置 Windows 桌面版应用程序的反对,因为它当初曾经默认被启用!
当然,此次稳定版公布必定不只是“删掉”一个标记这么简略 ;-) 在 Flutter 2.10 的 Windows 反对中,也蕴含了对⽂本处理、键盘处理和键盘快捷键的⼴泛改良,以及间接与 Windows 集成的新形式、⽀持命令行参数、全球化⽂本输⼊和无障碍性能等。
无关 Windows 稳定版公布的更多信息,你能够浏览明天的另一篇推送文章,文章为大家详述了 Flutter 在 Windows 上的架构,同时阐明了有多少 Flutter package 和插件曾经⽀持 Windows。你还能够查看咱们的⼯具和应⽤合作伙伴在 Windows 上使⽤ Flutter 制作的一些⽰例等。
引擎的性能改良
此版本的 Flutter 包含由社区成员 knopp 提供的 绘制脏区管理 的初步⽀持,他为 iOS/Metal 上的单个脏区域启⽤了选择性重绘。这一变动将一些基准测试中九非常位和九十九分位的光栅化工夫缩小了一个数量级,并将这些基准测试中的 GPU 利⽤率从 90% 以上升高到了 10% 以下。
咱们心愿在将来的版本中,将选择性重绘的劣势引入到其余平台。
在 Flutter 2.8。而在 Flutter 2.10 中,咱们曾经开始使⽤它 (DisplayList
) 进行优化。例如, 一种常见不通明层的状况当初曾经以更高效的形式实现 。即便在最坏的状况下,在咱们基准测试中每帧光栅化工夫也降落到了先前的三分之一以下。
随着咱们持续开发记录格局,未来会持续将该优化扩大到更多的场景。
在 profile 和 release 模式下,Dart 代码将以 AOT 形式编译。这段代码的轻量和高效的要害来源于整个程序的类型流剖析,它解锁了许多编译器优化和激进的摇树优化 (tree-shaking)。但因为类型流剖析必须涵盖整个程序,因而可能会有些耗费性能。新版本带来了 更快的类型流剖析实现。在咱们的基准测试中,Flutter 应⽤的总体构建工夫降落了约 10%。
与平常一样,性能加强、缩小内存使⽤和缩小提早是 Flutter 团队的⾸要工作。期待将来版本的进一步改良。
iOS 平台更新
除了性能改良之外,咱们还增加并加强了一些特定平台的性能。luckysmg 就为咱们带来了一项 iOS 上新的加强性能——更晦涩的键盘动画,它会⾃动利用在你的利用中。
除此以外,咱们还通过修复一些 边缘状况解体提⾼了 iOS 相机插件的稳定性。
最初, 咱们为 64 位架构的 iOS 零碎退出缩小内存使⽤的新性能:压缩指针。
64 位架构将指针表⽰为 4 字节大小的数据结构。当你有大量对象时,指针本⾝占⽤的空间会减少应⽤整体的内存占用,特地是如果你的应⽤更宏大更简单时,这些应⽤有更多的 GC 抖动。然而,iOS 应⽤不太可能有⾜够的对象来占⽤大部分的 32 位地址空间(20 亿个对象),更不⽤说庞⼤的 64 位地址空间(900 亿个对象)了。
Dart 2.15 中引入了压缩指针的性能,在这次公布的 Flutter 版本中,咱们使⽤这项性能来缩小 64 位 iOS 应⽤的内存使⽤量。你能够查看 Dart 2.15 博客⽂章 理解详细信息。
与此同时,Dart 2.16 稳定版也正式公布,咱们将在略微晚些的工夫公布 Dart 2.16 的更新内容,敬请关注。
Android 平台更新
Flutter 2.10 版本还蕴含许多针对 Android 平台的改良。当初在默认状况下,当你创立新应⽤时,Flutter 默认⽀持最新版本的 Android,即 Android 12(API 级别 31)。此外,在此版本中,咱们启⽤了 multidex ⾃动⽀持。如果您的应⽤⽀持低于 21 的 Android SDK 版本,并且超过了 64K 的 dex ⽅法数限度,只需将 --multidex
参数传递给 flutter build appbundle
或 flutter build apk
命令,你的应⽤就会减少 multidex 的⽀持。
最初,在咱们收到开发者们对于 Gradle 抛出让人费解的谬误音讯的反馈后,咱们调整了 Flutter 命令行工具,当初它将 为常⻅问题提供解决办法 。例如,如果你向你的应⽤增加了一个插件,该插件须要您提⾼最低反对的 Android SDK 版本,你当初会在错误信息中看到「Flutter Fix」的倡议。
咱们将持续为常⻅谬误音讯增加更多解决办法的倡议,并心愿取得你对其余谬误音讯的反馈,这些谬误音讯将显著帮忙开发者解决同类问题。
Web 平台更新
此版本还蕴含对 Web 平台的一些改良。例如,在先前的版本中,当鼠标拖动到多行文本框的边缘时,它不会正确地追随滚动。在此版本中,当抉择光标拖出了文本框时,文本框会进行滚动,浏览并选中对应的文字内容。此行为同时适⽤于 Web 平台和桌⾯端。
Flutter 2.10 还包含对 Web 平台的另一项显著改良,咱们也始终在寻求缩小将 Flutter 利用运行到 Web 平台的开销,在先前的版本中,每次咱们想要将原⽣ HTML 的 widget 引⼊ Flutter 应⽤时,咱们都须要一个覆盖层 (Overlay) 作为咱们对 Web 的平台视图 (Platform view) ⽀持的一部分。这些叠加层中的每一个都⽀持⾃定义绘制,但同时也代表了肯定数量的性能开销。如果你的应⽤中有⼤量原⽣ HTML 的 widget (例如链接),那这将造成十分大性能开销。在这个版本中咱们为 Web 平台构建了一个新的「⾮绘制的平台视图」,曾经基本上打消了这种开销。咱们曾经 将这种优化 利用到 Link widget 中,这意味着如果您的 Flutter Web 应⽤中有⼤量的链接,它们将不再产生额定的性能耗费。随着工夫的推移,咱们会将此优化应⽤到其余的 widget。
Material 3
此版本是向 Material 3 过渡的开始,其中包含 从单一种⼦颜⾊⽣成整个配⾊⽅案 的能力。
你能够应用任意色彩来创立新的 ColorScheme
类型:
final lightScheme = ColorScheme.fromSeed(seedColor: Colors.green);
final darkScheme = ColorScheme.fromSeed(seedColor: Colors.green, brightness: Brightness.dark);
ThemeData
的构造函数还有一个新的 colorSchemeSeed
参数,能够间接从色彩⽣成主题的配⾊⽅案:
final lightTheme = ThemeData(colorSchemeSeed: Colors.orange, ...);
final darkTheme = ThemeData(colorSchemeSeed: Colors.orange, brightness: Brightness.dark, ...);
此外,此版本包含了 ThemeData.useMaterial3
的参数,它能够将 widget 切换到新的 Material 3 外观 。
最初,咱们增加了 1028 个新的 Material 图标。
你能够在 这个 issue 中 跟进 Material 3 的接入状况,并随时留下你的意见反馈。
集成测试改良
2020 年 12 ⽉,咱们发表了使⽤ integration_test
进行端到端测试的新⽅法,查看中文文档 集成测试介绍 理解更多。这个新的 package 取代了 flutter_driver
作为进行集成测试的举荐⽅式,提供了新性能,如 Firebase 测试实验室⽀持以及对 Web 和桌⾯的⽀持。
从那时起,咱们对集成测试进行了进一步改良,包含 将 integration_test
package 内置在 Flutter SDK 中 ,使其更容易与您的应⽤集成。当初,咱们撰写了一份新的迁徙指南,帮忙你 从 flutter_driver 测试迁徙到 integration_test。
现有的⽂档、示例 和 codelab 也已针对 integration_test
进行了更新。如果你还没有在 Flutter 应⽤上使⽤ integration_test
,那么从当初就开始吧!
DevTools
在这个版本中,咱们也在 Flutter DevTools 上做了一些改良⼯作,包含从命令行间接使⽤ DevTools 的繁难性能。当初你⽆需使⽤ pub global activate
来下载和运行最新版本的 devtools,只需简略地使⽤ dart devtools
获取与你正在使⽤的 Flutter 版本统一的最新版本即可。
咱们还进行了一些 可⽤性更新,包含 改良在调试器变量窗格中查看⼤型列表和映射 的⽀持(感激 Elliott)。
最初,咱们行将公布年度 DevTools 问卷调查!请提供你的反馈并帮忙咱们改善你的开发体验。
VSCode 改良
Flutter 的 Visual Studio Code 扩大也取得了许多加强性能,包含 在代码的更多地位预览色彩 以及 可更新颜色代码的颜⾊选择器。
此外,如果你想成为 VSCode 的 Dart 和 Flutter 扩大的预公布版本的测试⼈员,你能够 在你的扩大设置中切换到预公布版本。
你能够在 flutter-announce 邮件列表的 这一篇 浏览无关此更新的详细信息。
移除 dev 版本公布渠道
在 Flutter 2.8 版本中,咱们发表咱们正在致力移除 dev 版本公布渠道,以简化你的抉择并缩小研发的开销。在这个版本中,咱们曾经实现了这项⼯作,包含:
- 更新 Flutter ⼯具以帮忙将开发⼈员迁徙出开发频道
- 更新 wiki 对于各个渠道的阐明和承诺
- 更新弃⽤政策
- 从 DartPad、预提交测试和⽹站中删除 dev 渠道的⽀持
Dev 渠道现已被彻底移除。如果咱们漏了一些没有移除的地位,请通知咱们。
对 iOS 9.3.6 的⽀持进入序幕
因为咱们实验室中⽬标设施的使⽤缩小和保护难度减少,咱们正在 调整对于 iOS 9.3.6 的反对,从「⽀持」到「尽力⽽为」。这意味着对 iOS 9.3.6 的⽀持和对 32 位 iOS 设施的⽀持将仅通过编码实际、Ad-Hoc 和社区测试来保护了。
咱们预计在 2022 年第三季度的 Flutter 稳固版本中放弃对 32 位 iOS 设施以及 iOS 版本 9 和 10 的 ⽀持。这意味着基于稳固的 Flutter SDK 构建的应⽤将不再在 32 位 iOS 设施上运行,并且 Flutter ⽀持的最低 iOS 版本将减少到 iOS 11。
破坏性改变
咱们还致力在每个版本和此版本中缩小破坏性改变,只管咱们还没有齐全归零,但咱们会持续致力!
- 构建 Flutter 利用的 Kotlin 版本应高于 1.5.31
- Flutter 2.5 之后移除的已弃用的 API
- Web 上的原始图像应用正确的起源和色彩
- Apple Pencil 顺手写 TextInputClient 变动
如果您仍在使⽤这些 API,能够浏览 flutter.cn 上的迁徙指南。判若两人,⾮常感激社区奉献测试,帮忙咱们辨认这些破坏性改变。
总结
谨代表 Google Flutter 团队的所有成员向大家说一声谢谢,感激你成为社区的一员!有了社区的帮忙,Flutter 能力成为最受欢迎的跨平台 UI 工具。只管对 Windows 的稳固⽀持才刚刚开始,但咱们曾经开始期待咱们将独特构建的所有!
致谢
- 原文: What’s New in Flutter 2.10
- 链接: https://medium.com/flutter/whats-new-in-flutter-2-10-5aafb0314b12
- 翻译: Alex
- 审校: Vadaski / Luke
- 制图: Lynn