本次 Flutter 3.0 主要包括 macOS 和 Linux 的稳定版发布,以及相关的性能改进等。原文链接 https://medium.com/flutter/whats-new-in-flutter-3-8c74a5bc32d0

又到了发布 Flutter 稳定版本的时候,在三个月前我们发布了 Flutter 关于 Windows 的稳定版,而今天,除 Windows 之外,Flutter 也正式支持 macOS 和 Linux 上的稳定运行

在这里感谢所有 Flutter contributors 的辛勤工作,本次版本发布合并了 5248 个 PR。

Flutter 3.0 的发布,主要包括 Flutter 对 macOS 和 Linux 正式版支持、进一步的性能改进、手机端和 Web 端相关的更新等等。此外还有关于减少对旧版本 Windows 的支持,以及一些 breaking changes 列表

稳定版 Flutter 已经支持所有桌面平台

Linux 和 macOS 已达进入稳定版本阶段,包括以下功能:

级联菜单和对 macOS 系统菜单栏的支持

现在可以使用 PlatformMenuBar 在 macOS 上创建菜单栏,该 Widget 支持仅插入平台菜单,并控制 macOS 菜单中显示的内容。

所有桌面平台全面支持国际化文本输入

包括使用input method editors(IME),如中文、日文和韩文,在 Flutter 3.0 上所有桌面平台上都得到支持,包括第三方输入法如搜狗和谷歌日文输入法。

所有桌面平台的 Accessibility

Flutter for Windows、macOS 和 Linux 全面支持 Accessibility 服务,例如屏幕阅读、无障碍导航和倒置颜色等。

macOS 上默认的 Universal binaries

从 Flutter 3 开始,Flutter macOS 桌面应用都将被构建为 universal binaries,从而支持现有的基于 Intel 处理器的 Mac, 和 Apple 的 Apple Silicon 设备。

放弃 Windows 7/8

在 Flutter 3.0 中,推荐将 Windows 的版本提升到 Windows 10,虽然目前 Flutter 团队不会阻止在旧版本(Windows 7、Windows 8、Windows 8.1)上进行开发,但 Microsoft 不再支持 这些版本,虽然 Flutter 团队将继续为旧版本提供“尽力而为”的支持,但还是鼓励开发者升级。

注意:目前还会继续为在 Windows 7 和 Windows 8 上能够正常运行 Flutter 提供支持;此更改仅影响开发环境。

移动端更新

对移动端的更新包括以下内容:

折叠手机的支持

Flutter 3 版本开始支持可折叠的移动设备。在 Microsoft 发起的合作中,新功能和 Widget 可让开发者在可折叠设备上拥有更舒适的体验。

其中包括 MediaQuery 现在包含一个 DisplayFeatures 列表,用于描述设备的边界和状态,如铰链、折叠和切口等。此外 DisplayFeatureSubScreen 现在可以通过定位其子 Widget 的位置不会与 DisplayFeatures 的边界重叠,并且目前已经与 framework 的默认对话框和弹出窗口集成,使得 Flutter 能够立即感知和响应这些元素

这里非常感谢 Microsoft 团队,尤其是@andreidiaconu,感谢他们的 contributions!另外可以试用一下Surface Duo 模拟器示例,它包括一个带有 Flutter Gallery 特殊分支的示例,可以用于了解 Flutter 在折叠屏中的实际应用。

iOS 可变刷新率支持

Flutter 现在支持 iOS 上的 ProMotion 刷新率,包括 iPhone 13 Pro 和 iPad Pro 等

在这些设备上,Flutter 可以以达到 120 hz的刷新率进行渲染,再次之前 iOS 上的刷新率限制为 60hz,有关更多详细信息,请参阅flutter.dev/go/variable-refresh-rate。

更多可见:《Flutter 120hz 高刷新率在 Android 和 iOS 上的调研总结》

简化 iOS 的发布

Flutter 团队 为 flutter build ipa 命令添加了新选项支持以简化发布 iOS 应用。

当开发者准备好分发到 TestFlight 或 App Store 时,可以通过运行 flutter build ipa 以构建 Xcode 存档(.xcarchive文件)和应用程序包(.ipa文件)。 这时候可以选择添加 —-export-method ad-hoc—-export-method development—-export-method enterprise 来定制发布支持。

构建应用程序包后,可以通过 Apple Transport macOS 应用或在命令行上使用 xcrun altool(运行 man altool 用于 App Store Connect API 的密钥身份验证)将其上传到 Apple 。上传后,应用就可以可发布到TestFlight 或 App Store。

通过这个简化流程,在设置初始的Xcode 项目设置后,例如名称和应用图标,开发者可以不再需要打开 Xcode 来发布 iOS 应用

Gradle 版本更新

现在使用 Flutter 工具创建新项目,会发现生现在开始使用最新版本的 Gradle 和 Android Gradle Plugin,对于现有项目,需要手动将版本升级到 Gradle 的 7.4 和 Android Gradle 插件的 7.1.2。

停用 32 位 iOS/iOS 9/iOS 10

正如 2022 年 2 月发布的 2.10 稳定版本时所说的那样,Flutter 对 32 位 iOS 设备以及 iOS 9 和 10 版本的支持即将结束。此更改影响 iPhone 4S、iPhone 5、iPhone 5C 以及第 2、3 和 4 代 iPad 设备。Flutter 3 是它们最后一个支持 iOS 版本支持。

要了解有关此更改的更多信息,请查看RFC:End of support for 32-bit iOS devices。

Web 更新

Web 应用更新包括以下内容:

图像解码

Flutter web 现在会在支持它的浏览器中自动检测和使用 ImageDecoder API,而截至今天大多数基于 Chromium 的浏览器(Chrome、Edge、Opera、三星浏览器等)都添加了此 API。

新的 API 使用浏览器的内置图像编解码器从主线程异步解码图像,这将图像解码速度提高了 2 倍,并且它从不阻塞主线程,从而消除了以前由图像引起的所有卡顿问题

Web 应用的生命周期

Flutter Web 应用程序的新生命周期 API 使开发者可以更灵活地从托管 HTML 页面控制 Flutter 应用的引导过程,并帮助 Lighthouse 分析应用的性能,包括以下经常请求的场景:

  • 启动画面。
  • 加载指示器。
  • 在 Flutter 应用程序之前显示的纯 HTML 交互式登录页面。

有关更多信息,请查看docs.flutter.dev 上的自定义 Web 应用程序初始化。

工具更新

Flutter 和 Dart 工具的更新包括:

更新的 lint 包

lint 包的 2.0 版已发布: