关于flutter:一起看-IO-Flutter-3-更新详解

作者 / Kevin Jamaul Chisholm, Technical Program Manager for Dart and Flutter at Google

又到了 Flutter 稳定版公布工夫,咱们无比骄傲地发表推出 Flutter 3 !仅 3 个月前,咱们发表了 Flutter 对 Windows 的反对。当初,咱们再次怀着冲动的情绪发表,继 Windows 之后,Flutter 现已稳固反对 macOS 和 Linux!

咱们总计合并了 5,248 条 PR,感激各位 Flutter 贡献者的辛勤工作!

此版本中激动人心的降级包含: 更新了 Flutter 对 macOS 和 Linux 的反对,性能失去了显著晋升,针对挪动设施和 web 端的更新,以及诸多其余性能!此外,咱们还带来了对于缩小对旧版 Windows 提供反对的音讯,以及几条重大变更。上面让咱们直奔主题吧!

全桌面平台生产就绪

Linux 和 macOS 平台的反对已进入稳固状态,内含下列性能:

级联菜单和 macOS 零碎菜单栏反对

当初您能够应用 PlatformMenuBar widget 在 macOS 上创立平台渲染的菜单栏,反对插入仅限该平台应用的菜单,并管制 macOS 利用菜单中的显示内容。

△ 级联菜单示意

残缺反对全桌面平台多国文本输出

全副三种桌面平台残缺反对多国文本输出,包含应用文本 输入法编辑器 (IME) 的语言,如中文、日文和韩文。同时反对第三方输入法,如搜狗 (Sogou)、谷歌日文输入法 (Google Japanese Input) 等。

全桌面平台无障碍服务

Flutter 反对 Windows、macOS 和 Linux 平台的无障碍服务,包含屏幕文字浏览、无障碍导航和色彩反转等。

macOS 平台默认应用通用二进制文件

在 Flutter 3 中,Flutter macOS 桌面利用会被构建为通用二进制文件,从而原生反对应用 Intel 处理器的 Mac 电脑和搭载 Apple Silicon 的新设施。

不再反对应用 Windows 7/8 进行开发

此版本将倡议的 Windows 开发版本晋升为 Windows 10。尽管咱们不会禁止应用旧版本 (Windows 7、Windows 8、Windows 8.1) 进行开发,但因为 Microsoft 不再反对这些旧版本,咱们仅会针对这些版本提供无限的测试。只管咱们会尽力为旧版本提供反对,但还是建议您降级版本。

留神: 在 Windows 7 和 8 上仍然能够运行 Flutter 利用,此更改只影响咱们举荐应用的开发环境。

挪动端更新

咱们针对挪动端的更新包含:

反对可折叠设施

Flutter 3 反对可折叠挪动设施。通过由 Microsoft 牵头的单干,让大家能够应用新的性能和 widget 在可折叠设施上创立动感、愉悦的体验。

作为单干的一部分,MediaQuery 当初蕴含一个 DisplayFeature 列表,用以形容设施组件状态,包含铰链、折叠状态和屏幕刘海等。此外,DisplayFeatureSubScreen widget 蕴含的子 widget 的地位当初不会与 DisplayFeature 的边界重叠,并且曾经用于框架的默认对话框和弹出窗口,使 Flutter 默认即可动静适应这些元素的地位。

非常感谢 Microsoft 团队。另外咱们还要特地鸣谢 @andreidiaconu 所做出的奉献!

欢送大家尝试 Surface Duo 模拟器示例,其中蕴含了 Flutter Gallery 的一个特地派生版本,以便理解 Flutter 在双屏中的理论运行状况:

反对 iOS 可变刷新率

Flutter 现已在应用 ProMotion 显示屏的 iOS 设施上反对可变刷新率,包含 iPhone 13 Pro 和 iPad Pro。在这些设施上 Flutter 利用的渲染刷新率可达 120 Hz,而之前最高为 60 Hz,这使得滚动等疾速动画的观感体验更加晦涩。请查看 官网文档 理解详情。

简化 iOS 公布

咱们为 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 利用 将其上传至 Apple,或应用 xcrun altool 在命令行中实现上传 (运行 man altool 获取 App Store Connect API 密钥验证阐明)。上传实现后,您的利用即可公布至 TestFlight 或 App Store。在实现利用显示名称、利用图标等初始 Xcode 我的项目设置 后,您在公布利用时就无需再关上 Xcode 了。

Gradle 版本更新

应用 Flutter 工具创立新我的项目时,您或者曾经留神到,生成的文件当初应用了最新版本的 Gradle 和 Android Gradle 插件。对于现有的我的项目而言,您须要手动将 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 以及 iPad 第二、三、四代设施。Flutter 3 是最初一个反对上述 iOS 版本和设施的稳固版本。

如需具体理解此项变更,请参阅 RFC: 终止对 32 位 iOS 设施的反对。

Web 端更新

咱们针对 web 端的更新包含:

图像解码

在浏览器反对的状况下,Flutter web 当初能够自动检测并应用 ImageDecoder API。到目前为止,大多数基于 Chrome 的浏览器都增加了此 API,如 Chrome、Edge、Opera、Samsung Browser 等。

这个新 API 应用浏览器内置的图像编解码器在主线程之外异步解码图像。这使得图像解码速度进步 2 倍,而且齐全不会阻塞主线程,打消了所有之前由图像引起的卡顿景象。

Web 利用的生命周期

Flutter web 利用的新生命周期 API 晋升了灵活性,可实现从托管 HTML 页面管制 Flutter 利用的疏导程序,并反对应用 Lighthouse 剖析您的利用的性能体现。这实用于许多用例,包含以下常被开发者们提及的场景:

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

请浏览官网文档 “自定义 web 利用初始化” 理解详细信息。

工具更新

咱们针对 Flutter 和 Dart 工装的更新内容包含:

Lint package 更新

Lint package 2.0 版现已公布:

  • Flutter
  • Dart

应用 flutter create 生成的 Flutter 3 利用将主动启用 2.0 版 Lint 套件。咱们倡议大家运行 flutter pub upgrade --major-versions flutter_lints,将现有利用、package 和插件迁徙到 2.0 版,以遵循 Flutter 最新、最优的最佳实际。

Lint 2.0 版中新增的大多数正告都带有主动修复性能。因而,当您在利用的 pubspec.yaml 中降级至最新 package 版本后,即可在代码库中运行 dart fix --apply 主动修复大多数 Lint 正告 (某些正告仍需局部手动操作)。对于尚未应用 package:flutter_lints 的利用、package 或插件,倡议开发者依照 迁徙指南 迁徙至最新版本。

性能晋升

感激开源贡献者 knopp,部分重绘曾经在反对此性能的 Android 设施上实现。在咱们的本地测试中,此性能在 Pixel 4XL 设施上将按照 backdrop_filter_perf 基准测试的帧栅格化工夫的平均值、90 百分位值和 99 百分位值缩减了 5 倍。当初,iOS 设施和较新版本的 Android 设施上都已实现在繁多矩形脏区呈现时进行部分重绘。

咱们 进一步晋升 了简略用例中不透明度动画的性能。具体而言,当 Opacity widget 只蕴含单个渲染原语时,通常由 Opacity widget 调用的 saveLayer 办法能够省略。在为此优化构建的基准测试中,此用例下的栅格化工夫晋升了 一个数量级。在今后的版本中,咱们打算为更多场景利用此优化。

在开源贡献者 JsouLiang 的致力下,引擎的光栅和界面线程在 Android 和 iOS 上的运行优先级曾经高于其余线程 (比方 Dart VM 的后盾垃圾回收线程)。在咱们的基准测试中,这使得帧构建均匀工夫提速 约 20%。

在第 3 版公布之前,光栅缓存的准入策略只查看图片中绘制算子的数量 (假如任何具备多个算子的图片都应该进入缓存)。但这会导致引擎耗费内存来缓存渲染速度极快的图片。此版本 引入新的机制,依据所蕴含绘制算子的老本来预计图像渲染的复杂性。在咱们的性能测试中,应用新机制作为栅格缓存准入策略能够 缩小内存用量,而不会升高性能。

感激开源贡献者 ColdPaleLight,他修复了 iOS 上因为 帧调度 bug 而导致大量动画帧失落的问题。感激所有报告此问题并提供掉帧复现视频的每一个人。

Impeller

咱们始终致力于解决 iOS 和其余平台上的晚期卡顿问题。在 Flutter 3 中,您能够在 iOS 上预览一个名为 Impeller 的实验性渲染后端。Impeller 会在引擎构建时预编译一组 较为玲珑、简略的着色器,从而防止在利用运行时编译,而后者是造成 Flutter 卡顿的次要起因。Impeller 尚未作好投产筹备,间隔实现也还有一段距离。目前 Impeller 尚未实现 Flutter 的所有性能个性,但咱们对它在 flutter/gallery 利用中实现的保真度和性能感到称心,并且很快乐地在这里和大家分享开发进度。特地是,在 Gallery 利用的过场动画中,即使最差的帧速度也比之前快大概 20 倍。

Impeller 能够带标记在 iOS 上应用。如果您要试用 Impeller,能够传递 --enable-impeller 标记至 flutter run,或将 Info.plist 文件中的 FLTEnableImpeller 标记为 true。Impeller 的开发会持续在 Flutter 主渠道进行,咱们心愿在将来的版本中提供进一步更新。

Android 上的内联广

应用 google_mobile_ads package 时,您应该能够感触到用户要害交互 (如页面之间的滚动和切换) 的性能有所晋升。在新兴市场广为风行的设施上,这种性能晋升尤其显著。最棒的是,您无需更改任何代码!

在具体实现方面,Flutter 当初是异步组合 Android 视图 (即通常所说的 平台视图)。这意味着 Flutter 的光栅线程无需期待 Android 视图渲染。当初,Flutter 引擎应用它治理的 OpenGL 纹理将视图显示在屏幕上。

更多令人兴奋的更新

咱们针对 Flutter 生态系统的其余更新包含:

Material 3

Flutter 3 反对新一代 Material Design,即 Material Design 3。Flutter 3 提供 Material 3 的可选反对,包含动静色彩、最新色彩零碎和字体等 Material You 性能,还蕴含许多组件的更新,以及在 Android 12 中引入的新触摸波纹设计和拉伸滚动等全新视觉效果。咱们欢送大家通过全新的 “将枯燥无味的 Flutter 利用变得生动有趣” 的 Codelab 来尝试 Material 3 的性能个性。请参阅 API 文档,具体理解如何选用上述新性能个性,以及哪些组件反对 Material 3。另请关注 Material 3 Umbrella issue 理解最新开发进展。

主题扩大

借助 “主题扩大 (Theme extension)”,Flutter 现反对向 Material 库中的 ThemeData 增加任何内容。您当初能够指定 ThemeData.extensions,而无需 (在 Dart 中) 扩大 ThemeData 并从新实现其 copyWithlerp 和其余办法。另外,package 开发者也能够提供 ThemeExtension。请参阅 官网文档 理解详情,并查看 GitHub 上的 相干示例。

广告

咱们晓得对于公布商来说,征求用户批准对个性化广告,以及应答 Apple 的 “利用追踪透明度 (App Tracking Transparency, ATT)” 要求十分重要。

为了反对这些需要,Google 提供了 “用户音讯平台 (User Messaging Platform, UMP)” SDK,取代了之前的开源 Consent SDK。在行将公布的 Google 挪动广告 SDK (Flutter) 中,咱们会减少对 UMP (用户音讯平台) SDK 的反对,让公布商可能征求用户批准。如需理解详情,请在 pub.dev 上查看 google_mobile_ads package 页面。

重大变更

在继续扩大和改良 Flutter 的过程中,咱们会尽量把重大变更的数量维持在最低限度。Flutter 3 蕴含以下重大变更:

  • 2.10 版之后移除已弃用的 API
  • 页面切换转为应用 ZoomPageTransitionsBuilder
  • Chips 的 useDeleteButtonTooltip 迁徙至 deleteButtonTooltipMessage

如果您正在应用上述 API,请参阅 Flutter.dev 上的 迁徙指南。

总结

依照 Statista 和 SlashData 等剖析机构的统计,Flutter 仍然是最受欢迎的跨平台界面工具包,咱们能放弃这种位置,社区的奉献功不可没,对此,Google Flutter 团队向大家致以由衷敬意。期待与各位社区成员共同努力,持续提供由社区驱动的工具,帮忙大家为用户发明出更多令人愉悦的体验!

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据