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

欢迎运用 Flutter 3.10!咱们迫不及待地想展示咱们令人惊叹的 Flutter 社区所做的巨大努力。这个Flutter版别运转令人难以置信的Dart 3,今天也能够运用了!

Flutter 3.10 包含对 Web、移动、图形、安全性等方面的许多改善。咱们开端谈正事吧!

Framework

Material 3

Material library 现在契合最新的Material Design 规范。这次更新包含新的组件和组件主题,更新的组件视觉作用等。开发者要运用新的特性必须先运用 opt in来导入这些特性。在下一个安稳版中,use Material3 默以为 true

要挑选加入 Material libraryM3 版别,请在您的 MaterialApp 主题中进行设置useMaterial3 : trueflutter create 创立新应用程序时,该命令会将其增加到您的主题中。

要预览这些改变,请检查DemoApp. 该演示能够让你检查切换 useMaterial3 开与关的作用。

ColorScheme.fromImageProvider()

一切M3组件都装备了主题的ColorScheme的默许色彩。默许的色彩计划运用深浅不一的紫色。你能够从一个单一的 seed 色彩或从一个图画创立一个自定义的色彩计划。在演示中测验这两种改变。生成的配色计划应该看起来不错,而且能够运用。

[译] Flutter 3.10 中的新功能

NavigationBar

这供给了一个M3版别的BottomNavigationBar小部件。尽管 M3 运用了不同的色彩、高亮和标高,但它的作业原理与曾经相同。要掩盖NavigationBars小组件的默许外观,请运用NavigationBarTheme小组件。尽管你不需要把现有的应用程序搬迁到这个组件上,但你应该把它用于新的应用程序。

[译] Flutter 3.10 中的新功能

NavigationDrawer

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

[译] Flutter 3.10 中的新功能

SearchBar and SearchAnchor

这些组件为搜索查询供给预测性文本。当用户输入一个搜索查询时,该应用程序在 “搜索视图 “上钩算出一个匹配的响应列表。用户要么挑选一个,要么调整查询。要掩盖这些组件的M3规划,请运用SearchBarThemeSearchAnchorTheme小东西。

[译] Flutter 3.10 中的新功能

Secondary Tab Bar

M3允许你创立第二层的标签内容。为了区别这个第二层的 TabBar,能够运用 TabBar.secondary

[译] Flutter 3.10 中的新功能

DatePicker updated forM3

M3 DatePicker更新了日历和文本框版别的色彩、布局和形状。这并没有改变API,但增加了一个新的DatePickerTheme

[译] Flutter 3.10 中的新功能

TimePicker updated forM3

M3 TimePickerDatePicker相同,更新了普通版和紧凑版小组件的色彩、布局和形状。

[译] Flutter 3.10 中的新功能

BottomSheet updated forM3

除了M3色彩和形状的更新,底层页面现在增加了一个可选的拖动手柄,当你把showDragHandle设置为true时,就会包含 drag handle

[译] Flutter 3.10 中的新功能

ListTile updated forM3

M3的ListTile更新了这个小部件的方位和距离。这包含内容填充、前导和跟随小部件对齐、最小前导宽度和垂直距离。API保持不变。

[译] Flutter 3.10 中的新功能

Drawer updated for M3

M3的 Drawer更新了色彩和标高,一起做了一些小的布局改动。

TextField Updates

M3 updates allTextFieldwidgets to support native gestures. Double clicking or triple clicking with a mouse work the same as double tapping or triple tapping on a touch device. By default, theTextFieldandCupertinoTextFieldwidgets use these features.

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

TextField double click/tap gestures

  • Double click + drag: 功用拓展
  • Double tap + drag: 功用拓展

[译] Flutter 3.10 中的新功能

TextField triple click/tap gestures

Triple click

  • 在多行 TextField 内,在点击的方位挑选一个段落块(Android/Fuchsia/iOS/MacOS/Windows)。
  • 当在多行 TextField “内,在点击的方位上挑选一个行块(Linux)。
  • 挑选单行 TextField 中的一切文本。

Triple tap

  • 在多行 TextField 内,挑选被点击方位的段落块。
  • 挑选单行 TextField 中的一切文本。

Triple click + drag

  • 在段落块中扩展挑选(Android/Fuchsia/iOS/MacOS/Windows)。
  • 在行块中扩展挑选(Linux)。

[译] Flutter 3.10 中的新功能

Flutter supports SLSA level 1

Flutter结构现在与软件工件的供应链等级(SLSA)Level 1 进行编译。这完成了许多安全功用的施行,包含:

  • Scripted build process : Flutter的构建脚本现在允许在可信的构建渠道上进行自动构建。在受维护的架构上构建有助于防止工件被篡改,然后提高供应链的安全性。
  • Multi-party approval with audit logging : Flutter发布作业流程仅在多个工程师批准后执行。一切的执行都会创立可审计的日志记载。这些改变保证没有人能够在源代码和工件生成之间引入改变。
  • Provenance. 测验版和安稳版现在都用 provenance 构建。这意味着具有预期内容的可信来历构建了结构发布的工件。每个版别都在 SDK档案 上发布了检查和验证来历的链接。

[译] Flutter 3.10 中的新功能

这项作业还允许团队朝着 SLSA L2 和 L3 合规性迈进。这两个等级侧重于在构建进程中和之后维护工件。

Web

Flutter Web 应用程序改善了加载时刻

此版别减小了图标字体的文件巨细。它从 Material 和 Cupertino 中删除了未运用的字形。

CanvasKit 缩小了一切浏览器的巨细

根据 Chromium 的浏览器能够运用更小的自定义 CanvasKit“风格”。保管的 CanvasKit 从谷歌行业领先的 CDN 供给服务。这应该会进一步提高功用。

元素嵌入

您现在能够从页面中的特定元素供给 Flutter 网络应用程序。在此版别之前,您的应用程序能够填充整个页面主体或显现在iframe符号内。能够在 GitHub 中找到示例代码。

着色器支撑

Web 应用程序能够运用 Flutter 的片段着色器支撑。

Engine

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应用程序中的“pull quote”屏幕。总归,这些改善将这些屏幕的内存占用量削减了近一半。内存运用量的削减也适度降低了 GPU 和 CPU 负载。Wondrous 应用程序可能不会记载负载下降。它的结构之前已经低于预算,但这一改变应该会延长电池寿数。

Impeller 还释放了团队更快地交付流行功用恳求的才能。一个示例导致在 iOS 上支撑更广泛的 P3 色域。在这篇文章的其他地方检查该功用的描绘。

社区贡献加速了咱们的前进,特别是 GitHub 用户ColdPaleLight和luckysmg。他们编写了多个与 Impeller 相关的补丁,提高了保真度和功用。

尽管 Impeller 满足大多数 Flutter 应用程序的烘托需求,但您能够挑选退出 Impeller。如果您挑选退出,请考虑在 GitHub 上提交问题以告知咱们原因。应用程序用户可能会注意到 Skia 和 Impeller 在烘托时存在细微差别。这些差异可能是过错,所以不要犹豫,提出问题。在未来的版别中,咱们将删除适用于 iOS 的旧版 Skia 烘托器以减小 Flutter 的巨细。

Impeller 的 Vulkan 后端持续获得发展。Android 上的 Impeller 仍在活跃开发中,但没有预备好进行预览。咱们计划在不久的将来分享更多相关信息。

要了解咱们的发展,请检查咱们的 GitHub 项目板。

Performance

此版别涵盖了除 Impeller 之外的更多功用改善和修正。

## Eliminating Jank 消除卡顿

咱们要感谢开源贡献者luckysmg。他们发现他们能够缩短从 Metal 驱动程序获取下一个可制作层的时刻。要获得该奖赏,您需要将FlutterViews布景色彩设置为非零值。此更改消除了最近 iOS 120Hz 显现器上的低帧率。在某些情况下,它会使帧速率增加三倍。 这协助咱们处理了六个 GitHub 问题。这一改变含义严重,以至于咱们向后移植了一个修补程序到 3.7 版别中。

在 3.7 安稳版中,咱们将本地图画的加载从渠道线程转移到 Dart 线程,以避免推迟来自渠道线程的 vsync 事情。可是,用户注意到Dart 线程上的这项额外作业也导致了一些卡顿。在此版别中,咱们将本地图画的翻开和解码从 Dart 线程移至后台线程。此更改消除了具有很多本地图画的屏幕上潜在的长时刻停顿,一起避免了推迟 vsync 事情。在咱们的本地测验和自动化基准测验中,此更改将多个同步图画的加载时刻缩短了一半。

[译] Flutter 3.10 中的新功能

咱们持续在 Flutter 新的内部 DisplayList 结构之上构建优化。在此版别中,咱们增加了根据 R-Tree 的除掉机制。这种机制在咱们的烘托器中更早地移除了制作操作的处理。例如,此优化加速了输出在屏幕外失败的自定义画家。咱们的微基准测验显现 DisplayList 处理时刻最多削减了 50%。具有裁剪自定义绘画的应用程序可能会看到不同的改善。改善的程度取决于隐藏制作操作的杂乱性和数量。

削减 iOS 发动推迟

应用程序包中标识符查找的低效战略增加了应用程序发动推迟。此发动推迟的增加与应用程序的巨细成正比。在此版别中,咱们修正了 bundle identifier lookup。这将大型出产应用程序的发动推迟削减了 100 毫秒或大约 30–50%。

缩小尺寸

Flutter 用作SkParagraph文本整形、布局和烘托的默许库。咱们包含了一个标志以回退到遗留libtxtminikin图书馆。因为咱们对 有充沛的信心SkParagraph,咱们在此版别中删除了libtxt和以及他们的标志。minikin这将 Flutter 的紧缩巨细削减了 30KB。

Stability

在 3.0 版别中,咱们在烘托管道后期启用了一项 Android 功用。此 Android 功用运用高级 GPU 驱动程序功用。当只有一个“脏”区域产生改变时,这些驱动程序功用会从头制作较少的屏幕。咱们将此增加到前期的优化中,以到达相似的作用。尽管咱们的基准测验结果鼓动了咱们,但还是呈现了两个问题。首要,改善最多的基准可能不代表实践用例。其次,事实证明很难找到支撑此 GPU 驱动程序功用的设备和 Android 版别集。鉴于有限的前进和支撑,咱们在 Android 上禁用了部分重绘功用。

运用 Skia 后端时,该功用在 iOS 上保持启用状态。咱们期望在未来的版别中通过 Impeller 启用它。

API 改善

APNG解码器

Flutter 3.10 处理了咱们最受关注的问题之一。它增加了解码图画的才能APNGAPNG您能够运用 Flutter 现有的图片加载 API 来加载图片。

图片加载 API 改善

受人尊敬的 Flutter 工程总监tvolkertdart:ui已对的图画加载 API进行了改善。咱们增加了一个新方法instantiateImageCodecWithSize。这支撑加载满足以下三个条件的图画的用例:

  • 加载时宽高比未知
  • 边界框约束
  • 原始纵横比约束

一个比如是当一个应用程序企图显现从网络加载的可能性池中的一个图画时。

Mobile

iOS

无线调试

您现在能够在没有电缆的情况下运转和热从头加载您的 Flutter iOS 应用程序!在 Xcode 中成功无线配对您的 iOS 设备后,您能够运用 flutter run 将您的应用程序部署到该设备。如果您遇到问题,请在Window > DevicesandSimulators > Devices下验证网络图标呈现在您的设备周围。要了解更多信息,请检查咱们的文档。

宽色域图画支撑

iOS 上的 Flutter 应用现在能够支撑宽色域图画的准确烘托。要运用宽色域支撑,应用程序必须运用 Impeller 并在文件FLTEnableWideGamut中增加标志Info.plist

拼写检查支撑

SpellCheckConfiguration()小部件现在默许支撑Apple在 iOS 上的拼写检查服务。要运用此小部件,请运用spellCheckConfiguration中的参数对其进行设置CupertinoTextField

[译] Flutter 3.10 中的新功能

自适应复选框和单选

此版别将CupertinoCheckBoxCupertinoRadio小部件增加到库中Cupertino。他们创立契合 Apple 样式的复选框和单选按钮组件。

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

优化 Cupertino 动画、过渡和色彩

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

  • 更新过渡CupertinoPageRoute_
  • 增加标题放大动画CupertinoSliverNavigationBar
  • 增加几种新的 iOS 系统色彩CupertinoColors

[译] Flutter 3.10 中的新功能

渠道视图功用

PlatformViews呈现在屏幕上时,Flutter会限制iOS 上的刷新率以削减卡顿。当应用程序显现动画或可翻滚时,应用程序用户会注意到这一点PlatformViews

macOS 和 iOS 能够在插件中运用同享代码

Flutter 现在支撑插件文件sharedDarwinSource中的密钥。pubspec.yaml这个键表明 Flutter 应该同享 iOS 和 macOS 代码。

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

应用扩展的新资源

咱们为 Flutter 开发人员增加了运用 iOS 应用程序扩展的文档。这些扩展包含实时活动、主屏幕小部件和同享扩展。

为了简化创立主屏幕小部件和同享数据,咱们向path_providerhomescreen_widget插件增加了新方法。

跨渠道规划的新资源

该文档现在包含针对特定UI 组件的跨渠道规划注意事项。要了解有关这些 UI 组件的更多信息,请检查Flutter UX GitHub 存储库中的评论。咱们感谢任何输入或反应!

安卓

Android CameraX 支撑

Camera X是一个 Jetpack 库,可简化向 Android 应用增加丰富的相机功用的进程。此功用适用于多种 Android 相机硬件。在此版别中,咱们为 Flutter Camera 插件增加了对 CameraX 的初步支撑。此支撑涵盖以下用例:

  • 图画捕捉
  • 视频录制
  • 显现实时相机预览

要测验一下,请挑选运用 CameraX 完成。要挑选加入,请将以下行增加到您的pubspec.yaml文件中。

    Dependencies:
        camera: ^0.10.4 # 最新相机版别  
        camera_android_camerax: ^0.5.0

咱们期望收到您的反应,因为咱们将持续增加更多 CameraX 功用,然后将 CameraX 设为默许完成。

开发者东西

咱们持续改善 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 run 或 flutter build Flutter Android 应用程序时看到过错。产生此过错是因为 Android Studio Flamingo 将其绑缚的 Java SDK 从 11 更新到 17。运用 Java 17 时, 7.3 之前的Gradle 版别无法运转。咱们更新flutter analyze --suggestions以验证是否因为 Java SDK 和 Gradle 版别之间的不兼容而产生此过错.

要了解修正此过错的不同方法,请检查咱们的搬迁攻略。

窗口单例弃用

此版别弃用了窗口单例。依靠它的应用程序和库应该从它搬迁。当您的应用程序在未来版别的 Flutter 中发动时,这会为您的应用程序预备多窗口支撑。

感谢社区

一如既往,非常感谢社区供给的测验,他们协助咱们辨认这些严重改变。要了解更多信息,请检查咱们的严重改变方针。

总结起来

在咱们结束此版别时,Google 的 Flutter 团队要感谢一切使此版别成为可能的贡献者。你们的奉献和辛勤作业协助 Flutter 成为行业的游戏规则改变者,并持续改造应用程序开发。咱们鼓励您开端探索 Flutter 的最新安稳版别,以利用它供给的一切惊人功用。这样做,仅仅flutter upgrade!请持续关注 Flutter 未来更多激动人心的更新。