[译] 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:true
。flutter 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设计,请应用SearchBarTheme
和SearchAnchorTheme
小部件。
二级选项卡栏
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
小部件以反对本机手势。用鼠标双击或三击与在触摸设施上双击或三击雷同。默认状况下,TextField
和CupertinoTextField
小部件应用这些性能。
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
作为文本成形、布局和出现的默认库。咱们包含了一个标记,以回退到旧的 libtxt
和 minikin
库。因为咱们对 SkParagraph
充满信心,咱们在此版本中删除了 libtxt
和 minikin
及其标记。这将缩小 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
库增加了 CupertinoCheckBox
和 CupertinoRadio
小部件。它们创立与 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: truemacos: 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多平台公布