我们非常高兴在本周发布了 Flutter 2。自 Flutter 1.0 发布至今已有两年多的时间,在如此短暂的时间内,我们解决了 24,541 个 issue,合并了来自 765 个贡献者的 17,039 个 PR。自九月发布 Flutter 1.22 以来,我们已解决 5,807 个 issue,合并了来自 298 个贡献者的 4,091 个 PR。在此特别感谢广大的贡献者,将业余时间慷慨地投入到 Flutter 项目的优化中。Flutter 2 的杰出贡献者有 xu-baolin (贡献了 46 个 PR)、a14n (贡献了 32 个 PR;专注于为 Flutter 引入空安全) 和 hamdikahloun (贡献了 20 个 PR;优化了一系列 Flutter 插件)。然而,为 Flutter 项目做出贡献的不只有开发者,还有我们负责评审 1,525 个 PR 的众多 PR 评审员,其中包括 hamdikahloun (身兼数职!)、CareF 和 YazeedAlKhalaf (年仅 16 岁!) 等人。Flutter 是真正的社区合力之作,如果没有问题反馈者、PR 贡献者和代码评审员,版本 2 便无法问世,是你们带来了这一新版本。
xu-baolin
https://github.com/xu-baolin
a14n
https://github.com/a14n
hamdikahloun
https://github.com/hamdikahloun
CareF
https://github.com/CareF
YazeedAlKhalaf
https://github.com/YazeedAlKhalaf
Flutter 2 的发布也带来了许多振奋人心的内容。您可以阅读昨天的图文《Flutter 2 正式发布!》,快速了解 Flutter 2 和 Dart 2.12 中的新增功能,以及我们的客户及合作伙伴是如何使用 Flutter 2 的。我们将在下周的图文中为大家详细介绍如何在生产环境中使用 Flutter web 稳定版并发挥其优势。
详细了解 Dart 2.12
https://medium.com/dartlang/announcing-dart-2-12-499a6e689c87
Flutter web 抵达稳定版里程碑
https://medium.com/flutter/web-post-d6b84e83b425
下面我们一起来详细了解下 Flutter 2 的新增功能吧!
Web
从现在开始,Flutter web 的支持已经从 Beta 版过渡到稳定阶段。随着首个稳定版本的发布,Flutter 通过对 web 平台的支持,将代码的复用性提升到了一个新高度。现在,当您平稳运行 Flutter 应用时,可以将 web 作为一个新的适配方向。
作为一家致力于通过数字化实现卓越运营的现代移动虚拟网络运营商,Moi Mobiili 选择使用 Flutter 构建其 Mun Moi 客户经理应用,并在近期发布了其 web 版应用。
借助 web 平台的诸多优势,Flutter 为构建丰富的交互式 web 应用奠定了基础。我们的首要重点是提升性能并优化渲染。除了 HTML 渲染引擎外,我们还新增了一个基于 CanvasKit 的渲染引擎,以及一些如 Link Widget 等特定于 web 的功能,以确保您的应用能够像 web 应用一样在浏览器中稳定运行。
有关此 Flutter web 稳定版的更多详情,请参阅 Flutter web 发布文章:
Moi Mobiili
https://www.moi.fi/
Link Widget
https://pub.flutter-io.cn/documentation/url_launcher/latest/link/Link-class.html
Flutter web 发布文章
https://medium.com/flutter/web-post-d6b84e83b425
空安全
健全的空安全是对 Dart 语言的重要补充,它通过区分可空类型和不可空类型来进一步加强类型系统。这使开发者能够防止 null error 崩溃,这也是导致应用崩溃的常见原因。通过将空检查合并到类型系统中,可以在开发期间捕获这些错误,从而防止生产环境中的崩溃。在包含 Dart 2.12 的 Flutter 2 中,健全的空安全得到了充分的支持。要了解更多细节,请参阅 Dart 2.12 发布文章:
Dart 2.12 发布文章
https://medium.com/dartlang/announcing-dart-2-12-499a6e689c87
pub.dev 已经发布了超过 1,000 个空安全 package,包括来自 Dart、Flutter、Firebase 和 Material 团队发布的数百个 package。如果您也是 package 的作者,请参阅迁移指南并着手迁移事项。
超过 1,000 个空安全 package
https://pub.flutter-io.cn/packages?q=&null-safe=1
Dart
https://pub.flutter-io.cn/packages?q=publisher%3Adart.dev&sort=popularity&null-safe=1
Flutter
https://pub.flutter-io.cn/packages?q=publisher%3Aflutter.dev&sort=popularity&null-safe=1
Firebase
https://pub.flutter-io.cn/packages?q=publisher%3Afirebase.google.com&sort=popularity&null-safe=1
Material
https://pub.flutter-io.cn/packages?q=publisher%3Amaterial.io&sort=popularity&null-safe=1
迁移指南
https://dart.cn/null-safety/migration-guide
桌面设备
在新版本中,Flutter 对桌面设备的支持已经进入稳定版本的前期准备阶段。也就是说,您现在可以尝试将其作为您 Flutter 应用的部署目标: 把它看作最终稳定版发布前的预览,最终稳定版本将于今年晚些时候发布。
Flutter 桌面版经过一系列大大小小的优化,才达到现在的质量。我们率先从文本编辑入手,确保其在每个支持平台上都能令文本选择点等基本功能获得如原生般的顺畅运行体验,并能够在键盘事件经过处理后将其取消。在鼠标输入方面,我们也已确保,当处理触摸输入以及在 Material 和 Cupertino 设计语言的 TextField 和 TextFormField 中添加内置上下文菜单,并在 ReorderableListView 上提供抓取控点时,使用高精度定点设备的拖放事件将立即开始,没有任何延迟。另外,内置的上下文菜单已经添加至以 Material 和 Cupertino 为设计语言的 TextField 及 TextFormField widget 中,ReorderableListView widget 添加了抓取控点功能。
文本选择点
https://github.com/flutter/flutter/pull/71756
在键盘事件经过处理后将其取消
https://github.com/flutter/flutter/issues/33521
Material
https://github.com/flutter/flutter/pull/74286
Cupertino
https://github.com/flutter/flutter/pull/73882
在 ReorderableListView 上提供抓取控点
https://github.com/flutter/flutter/pull/74299
ReorderableListView 现已支持抓取控点,便于鼠标轻松拖动
开发者可以使用 ReorderableListView 轻松移动项目,但用户需要长按项目以启用拖动操作。该设计在移动设备上很合理,但很少有桌面平台的用户会想到用鼠标长按某个项目来移动它,所以新版本提供了一个适用于鼠标或触摸输入的抓取控点。按照同样的思路,对于因平台而异的惯用功能,新版本提供了一个经过升级的滚动条,可使其与桌面平台完美适配。
经过升级的滚动条
https://github.com/flutter/flutter/pull/71664
新版本中的滚动条 widget 已适配桌面平台
更新后的 Scrollbar Widget 为桌面平台提供了预期的相同交互功能,例如支持拇指拖动、点击滚动条空白区域进行上下翻页,以及将鼠标悬停在滚动条的任何部位以显示一个轨道等。此外,由于滚动条可以通过新增的 ScrollbarTheme 类设定主题,您可以根据您的应用对其外观和感觉进行个性化设计。
新增的 ScrollbarTheme
https://api.flutter.dev/flutter/material/ScrollbarTheme-class.html
对于其他桌面平台的特定功能,本版本还为 Flutter 应用启用了命令行参数处理,这样一来,您可以通过在 Windows 文件资源管理器中双击鼠标等简单操作来打开应用中的文件。此外,我们还努力使 Windows 和 macOS 上的大小调整操作变得更加流畅,并面向全球用户推出了输入法 (IME) 支持。