[译] Flutter 3.10 的新功用

原文 medium.com/flutter/wha…

无缝的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。默许色彩计划运用紫色暗影。您能够从单个“种子”色彩或图画创立自定义色彩计划。在演示中测验这两种改动。生成的色彩计划应该看起来不错且易于拜访。

[译] Flutter 3.10 的新功能

NavigationBar

这供给了一个M3版别的BottomNavigationBar小部件。虽然M3运用不同的色彩、高亮和高度,但它的作业方式与以前相同。要掩盖NavigationBars小部件的默许外观,请运用NavigationBarTheme小部件。虽然您不需要将现有应用程序搬迁到此组件,但应该在新应用程序中运用它。

[译] Flutter 3.10 的新功能

NavigationDrawer

这供给了M3根据Drawer小部件的方针挑选小部件。NavigationDrawer显现了一个NavigationDestinations小部件的单选列表。您也能够在此列表中包含其他小部件。需要时,NavigationDrawer能够翻滚。要掩盖NavigationDrawers小部件的默许外观,请运用NavigationDrawerTheme小部件。

[译] Flutter 3.10 的新功能

SearchBar和SearchAnchor

这些组件为查找查询供给预测文本。当用户输入查找查询时,应用程序会在“查找视图”中核算匹配的响应列表。用户挑选一个或调整查询。要掩盖这些组件的M3规划,请运用SearchBarThemeSearchAnchorTheme小部件。

[译] Flutter 3.10 的新功能

[译] Flutter 3.10 的新功能

二级选项卡栏

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

[译] Flutter 3.10 的新功能

DatePicker更新为 M3

M3 DatePicker更新日历和小部件版别的色彩、布局和形状。这不会改动API,但增加了一个新的DatePickerTheme

[译] Flutter 3.10 的新功能

TimePicker更新为 M3

M3 TimePicker,像DatePicker相同,更新了惯例和紧凑版别的色彩、布局和形状。

[译] Flutter 3.10 的新功能

BottomSheet更新为 M3

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

[译] Flutter 3.10 的新功能

ListTile更新为 M3

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

[译] Flutter 3.10 的新功能

Drawer更新为M3

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

TextField更新

M3更新了一切TextField小部件以支撑本机手势。用鼠标双击或三击与在接触设备上双击或三击相同。默许情况下,TextFieldCupertinoTextField小部件运用这些功用。

TextField 双击/点击手势

双击+拖动: 扩展单词块中的挑选。

[译] Flutter 3.10 的新功能

TextField 三击/点击手势

TextField 三击

  • 当在多行TextFieldAndroid/Fuchsia/iOS/macOS/Windows)中时,在单击方位挑选一个阶段块。
  • 当在多行TextField(Linux)中时,在单击方位挑选一个行块。
  • 在单行TextField中挑选一切文本。

TextField 三击

  • 当在多行TextField中时,在单击方位挑选一个阶段块。
  • 在单行TextField中挑选一切文本。

TextField 三击+拖动

  • 扩展阶段块中的挑选(Android/Fuchsia/iOS/macOS/Windows)。
  • 扩展行块中的挑选(Linux)。

[译] Flutter 3.10 的新功能

Flutter支撑SLSA level 1

Flutter Framework现在编译支撑软件工件供应链等级(SLSA)Level 1。这承认了许多安全功用的实现,包含:

  • 脚本化的构建进程。Flutter的构建脚本现在答应在受信赖的构建渠道上进行自动化构建。在受维护的架构上构建有助于防止工件篡改,从而提高了供应链安全性。
  • 多方批阅和审计日志。Flutter发布作业流程仅在多个工程师同意后履行。一切履行都会创立可审计的日志记录。这些更改确保没有人能够在源代码和工件生成之间引进更改。
  • 来历。Beta和安稳的版别现在运用来历构建。这意味着可信赖的来历运用了预期的内容构建了框架发布工件。每个版别都发布了链接,可检查和验证SDK档案中的来历。

[译] Flutter 3.10 的新功能

这项作业还使团队能够向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 上明显改善了功用。

[译] Flutter 3.10 的新功能

考虑一个杂乱的屏幕,比如 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 3.10 的新功能

咱们持续在 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 参数进行设置。

[译] Flutter 3.10 的新功能

自适应复选框和单选按钮

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

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

优化 Cupertino 动画、转场和色彩

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

  • 更新 CupertinoPageRoute 转场
  • 增加 标题扩大动画到 CupertinoSliverNavigationBar
  • CupertinoColors 中增加了几种新的 iOS 系统色彩

[译] Flutter 3.10 的新功能

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 查询从时间线事情中提取特定数据。

[译] Flutter 3.10 的新功能

要了解更多信息,请检查 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多渠道发布