乐趣区

关于后端:译-Flutter-310-的新功能

[译] Flutter 3.10 的新性能

原文 https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c3…

无缝的 Web 和挪动端集成,Impeller 稳定版的突破性图形性能,以及更多

欢送应用 Flutter 3.10!咱们十分期待展现咱们令人惊叹的 Flutter 社区所做出的微小致力。Flutter 3.10 运行了令人难以置信的 Dart 3,同样在 明天 公布!

Flutter 3.10 包含了许多改良,包含 Web、挪动端、图形、平安等方面。让咱们开始吧!

框架

Material 3

Material 库当初与最新的 Material Design 标准相匹配。变动包含新组件和组件主题、更新的组件视觉效果等。开发人员必须应用 useMaterial3 主题标记“抉择”这些变动。在下一个稳固版本中,useMaterial3默认为true

要抉择 Material 库的 M3 版本,请在您的 MaterialApp 主题中设置 useMaterial3:trueflutter create 命令在创立新应用程序时会增加此主题。

要预览这些变动,请查看 demo app。演示可让您切换 useMaterial3 的开和关。

ColorScheme.fromImageProvider()

所有 M3 组件都配置了主题的默认色彩ColorScheme。默认色彩计划应用紫色暗影。您能够从单个“种子”色彩或图像创立自定义色彩计划。在演示中尝试这两种变动。生成的色彩计划应该看起来不错且易于拜访。

NavigationBar

这提供了一个 M3 版本的 BottomNavigationBar 小部件。尽管 M3 应用不同的色彩、高亮和高度,但它的工作形式与以前一样。要笼罩 NavigationBars 小部件的默认外观,请应用 NavigationBarTheme 小部件。尽管您不须要将现有应用程序迁徙到此组件,但应该在新应用程序中应用它。

NavigationDrawer

这提供了 M3 基于 Drawer 小部件的指标抉择小部件。NavigationDrawer显示了一个 NavigationDestinations 小部件的单选列表。您也能够在此列表中蕴含其余小部件。须要时,NavigationDrawer能够滚动。要笼罩 NavigationDrawers 小部件的默认外观,请应用 NavigationDrawerTheme 小部件。

SearchBar 和 SearchAnchor

这些组件为搜寻查问提供预测文本。当用户输出搜寻查问时,应用程序会在“搜寻视图”中计算匹配的响应列表。用户抉择一个或调整查问。要笼罩这些组件的 M3 设计,请应用 SearchBarThemeSearchAnchorTheme小部件。

二级选项卡栏

M3 容许您创立第二层选项卡内容。要辨别这个第二个TabBar,请应用[TabBar.secondary](<https://m3.material.io/components/tabs/overview#34192702-8a18-4da7-b2cf-d1579632cb96>)

DatePicker 更新为 M3

M3 DatePicker更新日历和小部件版本的色彩、布局和形态。这不会扭转 API,但增加了一个新的DatePickerTheme

TimePicker 更新为 M3

M3 TimePicker,像 DatePicker 一样,更新了惯例和紧凑版本的色彩、布局和形态。

BottomSheet 更新为 M3

除了 M3 色彩和形态的更新外,底部工作体现在还增加了一个可选的拖动手柄,当您将 showDragHandle 设置为 true 时蕴含在内。

ListTile 更新为 M3

M3ListTile更新了此小部件的定位和间距。这包含内容填充、当先和尾随小部件对齐、最小当先宽度和垂直间距。API 放弃不变。

Drawer 更新为 M3

M3Drawer更新了色彩和高度,同时进行了一些小的布局更改。

TextField 更新

M3 更新了所有 TextField 小部件以反对本机手势。用鼠标双击或三击与在触摸设施上双击或三击雷同。默认状况下,TextFieldCupertinoTextField 小部件应用这些性能。

TextField 双击 / 点击手势

双击 + 拖动: 扩大单词块中的抉择。

TextField 三击 / 点击手势

TextField 三击

  • 当在多行TextField(Android/Fuchsia/iOS/macOS/Windows)中时,在单击地位抉择一个段落块。
  • 当在多行TextField(Linux)中时,在单击地位抉择一个行块。
  • 在单行 TextField 中抉择所有文本。

TextField 三击

  • 当在多行 TextField 中时,在单击地位抉择一个段落块。
  • 在单行 TextField 中抉择所有文本。

TextField 三击 + 拖动

  • 扩大段落块中的抉择(Android/Fuchsia/iOS/macOS/Windows)。
  • 扩大行块中的抉择(Linux)。

Flutter 反对 SLSA level 1

Flutter Framework 当初编译支持软件工件供应链级别(SLSA)Level 1。这抵赖了许多平安性能的实现,包含:

  • 脚本化的构建过程。Flutter 的构建脚本当初容许在受信赖的构建平台上进行自动化构建。在受爱护的架构上构建有助于避免工件篡改,从而进步了供应链安全性。
  • 多方审批和审计日志。Flutter 公布工作流程仅在多个工程师批准后执行。所有执行都会创立可审计的日志记录。这些更改确保没有人能够在源代码和工件生成之间引入更改。
  • 起源。Beta 和稳固的版本当初应用起源构建。这意味着可信赖的起源应用了预期的内容构建了框架公布工件。每个版本都公布了链接,可查看和验证 SDK 档案中的起源。

这项工作还使团队可能向 SLSA L2 和 L3 合规性后退。这两个级别侧重于在构建过程中和之后爱护工件。

Web

改良了 Flutter Web 应用程序的加载工夫

此版本减小了图标字体的文件大小。它从 Material 和 Cupertino 中修剪了未应用的字形。

对所有浏览器进行 CanvasKit 减小大小

基于 Chromium 的浏览器当初能够应用更小的自定义 CanvasKit“flavor”。托管的 CanvasKit 从谷歌业界当先的 CDN 中提供服务。这应该进一步提高性能。

元素嵌入

您当初能够从页面中的特定元素中提供 Flutter Web 应用程序 Sorry, there seems to be no selected text or context provided for me to revise. Can you please provide more information?

着色器反对

Web 应用程序能够应用 Flutter 的片段着色器反对。

引擎

Impeller

在 3.7 稳固版本中,咱们在 iOS 上预览了 Impeller。自那时以来,咱们收到了许多用户的反馈,并加以解决。在此版本中,Impeller 有超过 250 个提交,咱们将 Impeller 设为 iOS 上的默认渲染器。默认状况下,所有应用 Flutter 3.10 构建的 iOS 应用程序都应用 Impeller。这些 iOS 应用程序将具备较少的卡顿和更好的性能一致性。

自 3.7 版以来,iOS 上的 Impeller 改善了其内存占用。Impeller 应用更少的出现通道和两头出现指标。在较新的 iPhone 上,启用有损纹理压缩可升高内存占用而不影响保真度。这些停顿还在 iPad 上显着改善了性能。

思考一个简单的屏幕,比方 Wonderous 应用程序中的“援用屏幕”。这些改良独特将这些屏幕的内存占用缩小了一半。内存使用量的缩小还使 GPU 和 CPU 负载略有降落。Wondrous 应用程序可能不会感知到负载降落。它的帧速率已在估算范畴内出现,但这种扭转应该会缩短电池寿命。

Impeller 还能够解锁团队更快地提供受欢迎的性能申请的能力。一个例子是反对 iOS 上更宽泛的 P3 色调空间。在本文的其余中央查看该性能的形容。

社区奉献减速了咱们的停顿,特地是 GitHub 用户 ColdPaleLight 和 luckysmg。他们编写了几个与 Impeller 相干的补丁,进步了保真度和性能。

尽管 Impeller 能够满足大多数 Flutter 应用程序的渲染需要,但您能够抉择退出 Impeller。如果您抉择退出,请思考在 GitHub 上 提交问题,通知咱们起因。应用程序用户可能会留神到 Skia 和 Impeller 以渺小的差别进行出现。这些差别可能是谬误,因而请不要犹豫提交问题。在未来的版本中,咱们将移除 iOS 的遗留 Skia 渲染器,以减小 Flutter 的大小。

Impeller 的 Vulkan 后端仍在持续开发。Impeller 在 Android 上仍在踊跃开发中,但尚未筹备好进行预览。咱们打算在不久的未来分享更多信息。

要跟踪咱们的停顿,请查看 咱们的 GitHub 我的项目板。

性能

此版本涵盖了除 Impeller 之外的更多性能改良和修复。

打消卡顿

咱们要感激开源贡献者 luckysmg。他们发现能够从 Metal 驱动程序中削减获取下一个可绘制层的工夫。要取得该处分,您须要将 FlutterViews 背景色彩设置为非空值。此更改打消了最近 iOS 120Hz 显示器上的低帧速率。在某些状况下,它将帧速率进步了三倍。这帮忙咱们解决了六个以上的 GitHub 问题。这个扭转十分重要,咱们将热修复利用到 3.7 版本中。

在 3.7 稳定版中,咱们将本地图像的加载从平台线程挪动到 Dart 线程,以防止提早平台线程的 vsync 事件。然而,用户留神到这在 Dart 线程上的额定工作也会导致某些卡顿。在此版本中,咱们将本地图像的关上和解码从 Dart 线程挪动到后盾线程。此更改打消了在具备大量本地图像的屏幕上可能呈现的长时间暂停,同时防止提早 vsync 事件。在咱们的本地测试和自动化基准测试中,此更改将几个同时加载的图像的加载工夫缩短了一半。

咱们持续在 Flutter 的新外部 DisplayList 构造上构建优化。在此版本中,咱们增加了一个 R -Tree 基于裁剪机制。该机制在咱们的渲染器中更早地删除了绘图操作的解决。此优化减速了例如,其输入不在屏幕上的自定义绘图器。咱们的微基准测试显示,显示列表解决工夫缩小了高达 50%。具备剪切定制绘画的应用程序可能会看到不同的改良。改良的水平取决于暗藏绘图操作的复杂性和数量。

缩小 iOS 启动提早

利用程序包中标识符查找的低效策略减少了应用程序的启动提早。该启动提早与应用程序的大小成比例增长。在此版本中,咱们修复了包标识符查找。这将大型生产应用程序中的启动提早缩小了 100ms 或约 30-50%。

减小大小

Flutter 应用 SkParagraph 作为文本成形、布局和出现的默认库。咱们包含了一个标记,以回退到旧的 libtxtminikin 库。因为咱们对 SkParagraph 充满信心,咱们在此版本中删除了 libtxtminikin 及其标记。这将缩小 Flutter 的压缩大小 30KB。

稳定性

在 3.0 公布中,咱们在渲染管道的前期启用了 Android 性能。此 Android 性能应用了高级 GPU 驱动程序性能。当只有一个“脏”区域发生变化时,这些驱动程序性能不会重绘屏幕的一部分。咱们将这些性能与相似成果的晚期图形管道优化相结合。只管咱们的基准测试后果激励咱们,但呈现了两个问题。首先,最改良的基准测试可能不代表理论用例。其次,反对此 GPU 驱动程序性能的设施和 Android 版本的汇合被证实很难找到。鉴于无限的停顿和反对,咱们在 Android 上禁用了局部重绘性能。

在 iOS 应用 Skia 后端时,该性能依然启用。咱们冀望在未来的版本中应用 Impeller 启用它。

API 改良

APNG 解码器

Flutter 3.10 解决了咱们最推广的问题之一。它增加了解码 APNG 图像的性能。您能够应用 Flutter 的现有图像加载 API 加载 APNG 图像。

图像加载 API 改良

Flutter 的驰名工程师 tvolkert 改良了 dart:ui 的图像加载 API。咱们增加了一个 新办法instantiateImageCodecWithSize。这反对加载一个在满足以下三个条件的状况下的图像:

  • 在加载时未知的纵横比
  • 一个突围盒束缚
  • 一个原始的宽高比束缚

一个例子是当应用程序尝试从网络加载一组可能性的图像时。

挪动

iOS

无线调试

您当初能够在没有电缆的状况下运行和热重载您的 Flutter iOS 应用程序!在 Xcode 中胜利对 iOS 设施进行无线配对后,您能够应用 flutter run 将应用程序部署到该设施。如果遇到问题,请在“窗口”>“设施和模拟器”>“设施”下验证网络图标是否呈现。要理解更多信息,请查看咱们的文档。

宽色域图像反对

Flutter 应用程序在 iOS 上当初能够反对精确渲染宽色域图像。要应用宽色域反对,应用程序必须应用 Impeller,并在 Info.plist 文件中增加 FLTEnableWideGamut 标记。

拼写查看反对

SpellCheckConfiguration() 小部件当初默认反对在 iOS 上应用 Apple 的拼写查看服务。要应用此小部件,请应用 CupertinoTextField 中的 spellCheckConfiguration 参数进行设置。

自适应复选框和单选按钮

此版本向 Cupertino 库增加了 CupertinoCheckBoxCupertinoRadio 小部件。它们创立与 Apple 款式相匹配的复选框和单选按钮组件。

Material 复选框和单选框小部件增加了 .adaptive 构造函数。在 iOS 和 macOS 上,这些构造函数应用相应的 Cupertino 小部件。在其余平台上,它们应用 Material 小部件。

优化 Cupertino 动画、转场和色彩

Flutter 3.10 改良了一些动画、转场和色彩,以匹配 SwiftUI。这些改良包含:

  • 更新 CupertinoPageRoute 转场
  • 增加 题目放大动画到 CupertinoSliverNavigationBar
  • CupertinoColors 中增加了几种新的 iOS 零碎色彩

PlatformView 性能

PlatformViews 呈现在屏幕上时,Flutter 在 iOS 上限度刷新率 以缩小卡顿。应用程序用户将在应用程序显示动画或可滚动的 PlatformViews 时留神到这一点。

macOS 和 iOS 能够在插件中共享代码

Flutter 当初反对插件的 pubspec.yaml 文件中的 sharedDarwinSource 键。此键批示 Flutter 应共享 iOS 和 macOS 代码。

ios:
  pluginClass: PathProviderPlugin
  dartPluginClass: PathProviderFoundation
  sharedDarwinSource: true
macos:
  pluginClass: PathProviderPlugin
  dartPluginClass: PathProviderFoundation
  sharedDarwinSource: true

利用扩大的新资源

咱们增加了文档供 Flutter 开发人员应用 iOS 利用扩大。这些扩大包含实时流动、主屏幕小部件和共享扩大。

为了简化创立主屏幕小部件和共享数据,咱们在 path_provider 和 homescreen_widget 插件中增加了新办法。

跨平台设计的新资源

文档当初包含特定 UI 组件的跨平台设计注意事项。要理解无关这些 UI 组件的更多信息,请查看 Flutter UX GitHub 存储库中的探讨。咱们感谢您的任何意见或反馈!

Android

反对 Android CameraX

Camera X,一个 Jetpack 库,简化了将丰盛的相机性能增加到 Android 应用程序中。该性能实用于宽泛抉择的 Android 相机硬件。在此版本中,咱们向 Flutter 相机插件增加了对 CameraX 的初步反对。此反对涵盖以下用例:

  • 图像捕获
  • 视频录制
  • 显示实时相机预览

要尝试,请抉择应用 CameraX 实现。要抉择,请将以下行增加到您的 pubspec.yaml 文件中。

Dependencies:
  camera: ^0.10.4 # Latest camera version
  camera_android_camerax: ^0.5.0

随着咱们持续增加更多的 CameraX 性能并使 CameraX 成为默认实现,咱们心愿失去您的反馈。

DevTools

咱们持续改良 DevTools,这是 Dart 和 Flutter 的性能和调试工具套件。一些亮点包含:

  • DevTools UI 应用 Material 3。这既现代化了外观,又加强了可拜访性。
  • DevTools 控制台反对在调试模式下对运行中的应用程序进行评估。在此版本之前,您只能在暂停应用程序时执行此操作。
  • 嵌入式的 Perfetto 跟踪查看器取代了以前的工夫线跟踪查看器。Perfetto 能够解决更大的数据集,并比传统的跟踪查看器体现更好。Perfetto 包含更多功能,例如:容许您固定感兴趣的线程。单击并拖动以从多个帧中抉择多个工夫线事件。应用 SQL 查问从工夫线事件中提取特定数据。

要理解更多信息,请查看 DevTools 2.23.1、DevTools 2.22.2 和 DevTools 2.21.1 的发行阐明。

弃用和破坏性更改

弃用的 API

此版本中的破坏性更改包含在 v3.7 公布后过期的弃用 API。要查看所有受影响的 API,以及其余上下文和迁徙指南,请查看此版本的弃用指南。Dart Fix 能够解决许多这些问题,包含在 IDE 中进行疾速修复和应用 dart fix 命令批量利用。

Android Studio Flamingo 降级

降级 Android Studio 到 Flamingo 后,当您尝试运行或构建 Flutter Android 应用程序时,可能会呈现谬误。此谬误是因为 Android Studio Flamingo 将其捆绑的 Java SDK 从 11 更新到 17。在应用 Java 17 时,Gradle 版本早于 7.3 无奈运行。咱们更新了 flutter analyze --suggestions,以验证此谬误是否由您的 Java SDK 和 Gradle 版本之间的不兼容性导致。

要理解不同的修复此谬误的办法,请查看咱们的迁徙指南。

窗口单例弃用

此版本弃用了窗口单例。依赖它的应用程序和库应该迁徙到其余选项。这将在 Flutter 的未来版本中启动多窗口反对,以便为此做好筹备。

感激社区

判若两人,感激社区奉献测试,他们帮忙咱们辨认这些破坏性更改。要理解更多信息,请查看咱们的破坏性更改政策。

总结

随着此版本的完结,Google 的 Flutter 团队要感激所有为此版本做出奉献的贡献者。您的贡献和辛勤工作曾经帮忙 Flutter 成为行业的革新者,并持续变革利用程序开发。咱们激励您开始摸索这个最新的 Flutter 稳固版本,以利用它所提供的所有惊人的性能。要这样做,只需 flutter upgrade!请持续关注 Flutter 在将来的更多令人兴奋的更新。


© 猫哥
ducafecat.com

end

本文由 mdnice 多平台公布

退出移动版