Google I/O 2023 - Flutter 3.10 发布

这篇具有很好参考价值的文章主要介绍了Google I/O 2023 - Flutter 3.10 发布。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

核心部分原文链接:https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c38c73

Flutter 3.10 主要包括有对 Web、mobile、graphics、安全性等方面的相关改进,核心其实就是:

iOS 默认使用了 Impeller
一堆新的 Material 3 控件袭来
iOS 新能优化,Android 顺带可有可无的更新
Web 可以无 iframe 嵌套到其他应用
Framework
Material 3
看起来谷歌对于 Material 3 的设计规范很上心,根据最新的 Material Design spec 规范 Flutter 也跟进了相关的修改,其中包括有新组件和组件主题和新的视觉效果等。

目前依然是由开发者可以在 MaterialApp 主题配置下,通过 useMaterial3 标志位选择是否使用 Material 3,不过从下一个稳定版本开始,useMaterial3 默认会被调整为 true 。

Google I/O 2023 - Flutter 3.10 发布

对于 Material 3 ,可以通过 https://flutter.github.io/samples/material_3.html 上的相关 Demo 预览。
ColorScheme.fromImageProvider
所有 M3 组件配置主题的默认颜色 ColorScheme,默认配色方案使用紫色 shades,这有区别于之前默认的蓝色。

除了可以从单一 “seed” 颜色来定制配置方案之后,通过 fromImageProvider 图像也可以创建自定义配色方案。

NavigationBar
本次还增加了一个 M3 版本的 BottomNavigationBar 控件效果,虽然 M3 使用不同的颜色、highlighting 和 elevation,但它的工作方式其实还是和以前一样。

如果需要调整 NavigationBars 的默认外观,可以使用使用 NavigationBarTheme 来覆盖修改,虽然目前你不需要将现有 App 迁移到 NavigationBars ,但是官方建议还是尽可能在新项目里使用 NavigationBars 作为导航控件。

NavigationDrawer
M3 针对 Drawer 同样提供了新的 NavigationDrawer ,它通过 NavigationDestinations 显示单选列表,也可以在该列表中包含其他控件。

同步M3下 Drawer 也更新了颜色和高度,同时对布局进行了一些小的更改。
NavigationDrawer 需要时可以滚动,如果要覆盖 NavigationDrawer 的默认外观,同样可以使用 NavigationDrawerTheme 来覆盖。

SearchBar 和 SearchAnchor
这是 Flutter 为搜索查询和提供预测效果新增的控件。

当用户在输入搜索查询时,会在 “search view” 中计算匹得到一个配响应列表,用户选择一个结果或调整匹配结果。

如果要覆盖 SearchBarTheme 的默认外观,同样可以使用 SearchAnchorTheme 来覆盖。

    Google I/O 2023 - Flutter 3.10 发布
Secondary Tab Bar
M3 下 Flutter 现在默认提供创建第二层选项卡式内容的支持,针对二级 Tab 可以使用 TabBar.secondary。

DatePicker 和 TimePicker 更新
M3下 DatePicker 更新了控件的日历、文本字段的颜色、布局和形状等,对应 API 没有变动,但会个新增了 DatePickerTheme 用于调整控件样式。

TimePicker 和DatePicker 一样,更新了控件的常规版本和紧凑版本的颜色、布局和形状。

    
BottomSheet 更新
M3 下 BottomSheet 除了颜色和形状更新之外,还添加了一个可选的拖动手柄,当设置 showDragHandle为 true 时生效。

ListTile 更新
M3下 ListTile 更新了定位和间距,包括 content padding、leading 和 trailing 控件的对齐、minimum leading width, 和 vertical spacing 等,但是 API 保持不变。

TextField 更新
M3 更新了所有 TextField 对原生手势支持。

用鼠标双击或三次点击 TextField 和在触摸设备上双击或三次点击效果相同,默认情况下 TextField 和CupertinoTextField 都可以使用该功能。

TextField double click/tap 手势
Double click + drag:扩展字块中的选择。
Double tap + drag:扩展字块中的选择。


TextField triple click/tap 手势
Triple click

在多行 TextField(Android/Fuchsia/iOS/macOS/Windows) 中选择点击位置的段落块。
在多行 TextField (Linux) 内部时,在 click 位置选择一个行块。
选择单行中的所有文本 TextField。
Triple tap

在 multi-line TextField 中选择点击位置的段落块 。
选择单行 TextField 中的所有文本
Triple click+拖动

扩展段落块中的选择 (Android/Fuchsia/iOS/macOS/Windows)。
扩展行块中的选择 (Linux)。


简单来说,就是手势和鼠标在双击和三击下,会触发不同的选择效果,并且 Linux 在三击效果下会有点差异
Flutter 支持 SLSA 级别 1
Flutter Framework 现在使用软件工件供应链级别 ( SLSA ) 级别 1 进行编译,这里面支持了许多安全功能的实现,包括:

脚本化构建过程:Flutter 的构建脚本现在允许在受信任的构建平台上自动构建,建立在受保护的架构上有助于防止工件篡改,从而提高供应链安全性。
带有审计日志的多方批准:Flutter 发布工作流程仅在多个工程师批准后执行,所有执行都会创建可审计的日志记录,这些更改确保没有人可以在源代码和工件生成之间引入更改。
出处:Beta 和稳定版本现在使用 provenance 构建,这意味着具有预期内容的可信来源构建了框架发布工件,每个版本都会发布链接以查看和验证 SDK 存档 的出处。


这项工作还在朝着 SLSA L2 和 L3 合规性迈进,这两个级别侧重于在构建过程中和构建之后提供 artifacts 保护。

Web
改进了加载时间
3.10 减小了图标字体的文件大小,它会从 Material 和 Cupertino 中删除了未使用的字形,从而提供了更快加载。

CanvasKit 变小
基于 Chromium 的浏览器可以使用更小的自定义 CanvasKit 渠道,托管在 Google gstatic.com 上的 CanvasKit 可以进一步提高性能。

Element 嵌入
现在可以 从页面中的特定 Element 来加载 Flutter Web ,不需要 iframe,在这个版本之前 fluter web 是需要填充整个页面主体或显示在 iframe 标记内,简单说就是把 flutter web 嵌套到其他 Web 下更方便了。

具体 Demo 可见:https://github.com/flutter/samples/tree/main/web_embedding
着色器支持
Web 应用可以使用 Flutter 的 fragment shader :

flutter:
  shaders:
    - shaders/myshader.frag

Engine
Impeller
在 3.7 稳定版中 iOS 提供了 Impeller 预览支持,从那时起 Impeller 就收到并解决了用户的大量反馈。

在 3.10 版本中,我们对 Impeller 进行了 250 多次提交,现在我们将 Impeller 设置为 iOS 上的默认渲染器。

默认情况下,所有使用 Flutter 3.10 为 iOS 构建的应用都使用 Impeller,这样 iOS 应用预计将会有更少的卡顿和更一致的性能。

自 3.7 版本以来,iOS 上的 Impeller 改进了内存占用,可以使用较少的渲染通道和中间渲染目标。

在较新的 iPhone 上,启用有损纹理压缩可在不影响保真度的情况下减少内存占用,这些进步也显着提高了 iPad 的性能。

比如 Wonderous 应用中的 “pull quote” 页面,这些改进是的当前页面下的内存占用量减少了近一半。

内存使用量的减少也适度降低了 GPU 和 CPU 负载,Wondrous 应用可能不会记录这些负载下降,它的框架之前已经优化的不错,但这一变化应该会延长续航能力。

Impeller 还释放了团队可以更快地交付流行功能请求的能力,例如在 iOS 上支持更广泛的 P3 色域。

社区贡献加速了我们的进步,特别是 GitHub 用 户ColdPaleLight 和 luckysmg ,他们编写了多个与 Impeller 相关的补丁,提高了保真度和性能。
虽然 Impeller 满足大多数 Flutter 应用的渲染需求,但你可以选择关闭 Impeller。如果选择退出,请考虑在 GitHub 上提交问题以告诉我们原因。

 <key>FLTEnableImpeller</key>
<false/>

用户可能会注意到 Skia 和 Impeller 在渲染时存在细微差别,这些差异可能是错误,所以请勿在 Github 上提出问题,在未来的版本中,我们将删除适用于 iOS 的旧版 Skia 渲染器以减小 Flutter 的大小。

另外,Impeller 的 Vulkan 后端然在支持当中,Android 上的 Impeller 仍在积极开发中,但尚未准备好进行预览。

要了解 Impeller 进展,请查看 https://github.com/orgs/flutter/projects/21。
Performance
3.10 版本涵盖了除 Impeller 之外还有更多性能改进和修复。

消除卡顿
这里要感谢 luckysmg, 他们发现可以缩短从 Metal 驱动获取下一个可绘制层的时间,而方式就是需要将 FlutterViews 背景颜色设置为非零值。

此更改消除了最近 iOS 120Hz 显示器上的低帧率问题,在某些情况下它会使帧速率增加三倍,这帮助我们解决了六个 GitHub issue。

Google I/O 2023 - Flutter 3.10 发布

这一变化具有意义重大,以至于我们向后移植了一个修补程序到 3.7 版本中。

在 3.7 稳定版中,我们将本地图像的加载从平台线程转移到 Dart 线程,以避免延迟来自平台线程的 vsync 事件。但是用户注意到 Dart 线程上的这项额外工作也导致了一些卡顿。

在 3.10 中,我们将本地图像的打开和解码从 Dart 线程移至后台线程,这个更改消除了具有大量本地图像的屏幕上潜在的长时间停顿,同时避免了延迟 vsync 事件,在我们的本地测试和自动化基准测试中,这个更改将多个同步图像的加载时间缩短了一半。

我们继续在 Flutter 新的内部 DisplayList 结构之上构建优化,在 3.10 中,我们添加了 R-Tree based culling 机制。

这种机制在我们的渲染器中更早地移除了绘制操作的处理。例如 优化加速了输出在屏幕外失败的自定义painter。

我们的 microbenchmarks 显示 DisplayList 处理时间最多减少了 50%,具有裁剪自定义绘画的 App 可能会看到不同效果的改进,改进的程度取决于隐藏绘制操作的复杂性和数量。

减少 iOS 启动延迟
之前应用中标识符查找的低效策略增加了应用启动延迟,这个启动延迟的增长与应用的大小成正比。

而在 3.10 中,我们修复了 bundle identifier lookup,这将大型应用的启动延迟减少了 100 毫秒或大约 30–50%。

缩小尺寸
Flutter 使用 SkParagraph 作为文本、布局和渲染的默认库,之前我们包括了一个标志以支持回退到遗留 libtxt和 minikin 。

由于我们对 SkParagraph 有充分的信心,我们在 3.10 中删除了 libtxt 和 minikin 以及它们的标志,这将 Flutter 的压缩大小减少了 30KB。

看起来信心十足了。
稳定性
在 3.0 版本中,我们在渲染管道后期启用了一项 Android 功能,该功能使用高级 GPU 驱动,当只有一个“dirty” 区域发生变化时,这些驱动功能会重新绘制较少的屏幕内容。

我们之前已经将它添加到早期的优化中以达到类似的效果,尽管我们的基准测试结果不错,但还是出现了两个问题:

首先,改进最多的基准可能不代表实际用例。
其次,事实证明很难找到支持此 GPU 驱动功能的设备和 Android 版本集
鉴于有限的进步和支持,我们在 Android 上禁用了部分重绘功能。

而使用 Skia 后端时,该功能在 iOS 上依然保持启用状态,我们希望在未来的版本中可以通过 Impeller 启用它。

API 改进
APNG解码器
Flutter 3.10 解决了一个我们最受关注的问题,它增加了 APNG 解码图像的能力,现在可以使用 Flutter 现有的图片加载 API 来加载 APNG 图片。

图片加载 API 改进
3.10 添加了一个新方法 instantiateImageCodecWithSize,该方法满足以下三个条件的用例支持:

加载时宽高比未知
边界框约束
原始纵横比约束
Mobile
iOS
无线调试
现在可以在无线的情况下运行和热重新加载的 Flutter iOS 应用。

在 Xcode 中成功无线配对 iOS 设备后,就可以使用 flutter run 将应用部署到该设备,如果遇到问题,请在 Window > Devices 和 Simulators > Devices下验证网络图标是否出现在设备旁边。

要了解更多信息,可以查阅 https://docs.flutter.dev/get-started/install/macos#ios-setup。
宽色域图像支持
iOS 上的 Flutter 应用现在可以支持宽色域图像的精确渲染,要使用宽色域支持,应用必须使用 Impeller 并在 Info.plist 文件添加 FLTEnableWideGamut 标志。

拼写检查支持
SpellCheckConfiguration() 控件现在默认支持 Apple 在 iOS 上的拼写检查服务,可以使用 spellCheckConfiguration 中的参数对其进行设置 CupertinoTextField 。

自适应复选框和单选
3.10 将 CupertinoCheckBox 和 CupertinoRadio 添加到库中 Cupertino ,他们创建符合 Apple 样式的复选框和单选按钮组件。

Material 复选框和单选控件添加了 .adaptive 构造函数,在 iOS 和 macOS 上,这些构造函数使用相应的 Cupertino 控件,在其他平台上使用 Material 控件。

优化 Cupertino 动画、过渡和颜色
Flutter 3.10 改进了一些动画、过渡和颜色以匹配 SwiftUI,这些改进包括:

更新 CupertinoPageRoute
添加标题放大动画 CupertinoSliverNavigationBar
添加几种新的 iOS 系统颜色 CupertinoColors


PlatformView 性能
当 PlatformViews 出现在屏幕上时,Flutter会限制 iOS 上的刷新率以减少卡顿,当应用显示动画或可滚动时,用户可能会在应用出现 PlatformViews 时注意到这一点。

macOS 和 iOS 可以在插件中使用共享代码
Flutter 现在支持插件 pubspec.yaml 文件中的 sharedDarwinSource ,这个 key 表示 Flutter 应该共享 iOS 和 macOS 代码。


应用扩展的新资源
我们为 Flutter 开发人员添加了使用 iOS 应用扩展文档,这些扩展包括实时活动、主屏幕控件和共享扩展。

为了简化创建主屏幕控件和共享数据,我们向 path_provider 和 homescreen_widget 插件添加了新方法。

具体可见:https://docs.flutter.dev/development/platform-integration/ios/app-extensions
跨平台设计的新资源
该文档现在包括针对特定 UI 组件的跨平台设计注意事项,要了解有关这些 UI 组件的更多信息,请查看Flutter UX GitHub 存储库中的讨论: https://github.com/flutter/uxr/discussions

具体可见:https://docs.flutter.dev/resources/platform-adaptations#ui-components
Android
Android CameraX 支持
Camera X 是一个 Jetpack 库,可简化向 Android 应用添加丰富的相机功能。

该功能适用于多种 Android 相机硬件,在 3.10 中,我们为 Flutter Camera 插件添加了对 CameraX 的初步支持,此支持涵盖以下用例:

图像捕捉
视频录制
显示实时相机预览
Dependencies: 
  camera:  ^0.10.4  # 最新相机版本
  camera_android_camerax:  ^0.5.0
Google I/O 2023 - Flutter 3.10 发布
开发者工具
我们继续改进了 DevTools,这是一套用于 Dart 和 Flutter 的性能和调试工具,一些亮点包括:

DevTools UI 使用 Material 3,这让外观现代化又增强了可访问性。
DevTools 控制台支持在调试模式下评估正在运行的应用,在 3.10 之前,只能在暂停应用时执行此操作。
嵌入式 Perfetto 跟踪查看器取代了以前的时间线跟踪查看器。
Perfetto 可以处理更大的数据集,并且比传统的跟踪查看器表现得更好,例如:

允许固定感兴趣的线程
单击并拖动以从多个帧中选择多个时间轴事件
使用 SQL 查询从时间轴事件中提取特定数据


弃用和重大更改
弃用的 API
3.10 中的重大更改包括在 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 版本之间的不兼容而发生此错误。

要了解修复此错误的不同方法,请查看我们的迁移指南:https://docs.flutter.dev/go/android-java-gradle-error。
 文章来源地址https://www.toymoban.com/news/detail-441561.html

到了这里,关于Google I/O 2023 - Flutter 3.10 发布的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter 3.10 之 Flutter Web 路线已定,可用性进一步提升,快来尝鲜 WasmGC

    随着 Flutter 3.10 发布,Flutter Web 也引来了它最具有「里程碑」意义的更新, 这里的「里程碑」不是说这次 Flutter Web 有多么重大的更新,而是 Flutter 官方对于 Web 终于有了明确的定位和方向 。 首先我们简单聊提升,这不是本篇的重点,只是顺带。 本次提升主要在于两个大点:

    2024年02月05日
    浏览(33)
  • Flutter 3.0 发布啦~快来看看有什么新功能-2022 Google I/O

    我不敢相信又到了另一个主要的Flutter稳定版本的时候了。是的,各位,欢迎Flutter 3.0。 去年,在Google I/O上,Flutter团队宣布了Flutter 2.2。从那时起,Flutter有一些重大改进和稳定的发布。AtInvertase,作为一家开源公司,我们也感谢数百名社区贡献者为Flutter所做的所有辛勤工作;

    2024年02月13日
    浏览(24)
  • Midjourney竞品Leap免费试用; Google 刚刚发布10门独立AI课程

    🦉 AI新闻 🚀 Midjourney竞品,免费试玩AI图片生成工具Leap,细节还需提升 摘要 :Leap是一款免费试玩的AI图片生成工具,用户可以选择不同的生成模型和步长及数量。功能上尚需提高细节把握能力,但因操作简单、逼真度高而备受关注。用户还可以通过API接入到自己的应用里使

    2024年02月09日
    浏览(40)
  • Google I/O 2023 - Dart 3 发布,快来看看有什么更新吧

    核心原文链接: https://medium.com/dartlang/announcing-dart-3-53f065a10635 自从 Flutter Forword 发布了 Dart 3α 预览 之后,大家对 Dart 3 的正式发布就一直翘首以待,这不仅仅是 Dart 版本号追上了 Flutter 版本号,更是 Dart 在 2.0 之后迎来的最大一次更新,主要包括了: 100% 空安全 records pattern

    2024年02月05日
    浏览(37)
  • Google I/O 2023 大会上发布了一些令人兴奋的技术和产品,让我们一起来看看吧!

    Google I/O 2023 大会上发布了一些令人兴奋的技术和产品,让我们一起来看看吧! Google I/O 2023 的日期和地点 Google I/O 2023 于 5 月 10 日在美国加州山景城的海岸线圆形剧场举行12。这是 Google 每年举办的开发者大会,旨在展示 Google 的最新解决方案、产品和技术。今年的大会有限制

    2024年02月04日
    浏览(38)
  • 【原文链接】Tri-Perspective View for Vision-Based 3D Semantic Occupancy Prediction

    原文链接:https://openaccess.thecvf.com/content/CVPR2023/papers/Huang_Tri-Perspective_View_for_Vision-Based_3D_Semantic_Occupancy_Prediction_CVPR_2023_paper.pdf 体素表达需要较大的计算量和特别的技巧(如稀疏卷积),BEV表达难以使用平面特征编码所有3D结构。 本文提出三视图(TPV)表达3D场景。为得到空间

    2024年01月23日
    浏览(39)
  • 2023美赛春季赛_赛题原文及翻译

    目录 Problem Y: Understanding Used Sailboat Prices Y题翻译: Problem Z: The Future of the Olympics Z题翻译: ​Like many luxury goods, sailboats vary in value as they age and as market conditions change. The attached “2023_MCM_Problem_Y_Boats.xlsx” file includes data on approximately 3500 sailboats from 36 to 56 feet long advertised for sale i

    2023年04月10日
    浏览(24)
  • python下载安装教程(Python 3.10版本)

    今天换了新的电脑,需要重新安装python和PyCharm,就简单的写个教程吧~ 1、进入Python官网 官网地址:https://www.python.org 2、点击【Downloads】展开后点击【Windows】跳转到下载python版本页面,选择\\\"Stable Releases\\\"稳定版本,我下载的是Python 3.10.10版本,所以找到【Python 3.10.10-Feb.8,2023】

    2024年02月10日
    浏览(53)
  • python3.8,3.9,3.10,3.11特性比较

    最近计划将python2迁移到python3,由于本人学习时用的3.7版本,所以仅作大于3.7版本的比较。 文档地址:python3.8 作用:避免重复调用,使代码更加简洁。PS:别当GO写,它不支持声明并赋值变量 作用: 新增了一个函数形参语法 / 用来指明某些函数形参必须使用仅限位置而非关键

    2024年02月05日
    浏览(40)
  • Linux 3.10 GCC版本太低升级到5.2.0

    某次升级内核,执行make menuconfig报当前版本太低,现场版本为4.8.5,需要升级到5.1.0版本以上,查看官网后,决定升级到5.20版本。注:GCC依赖于gmp 4.2+, mpfr 2.4+和mpc 0.8+,报错如下: 官方说明:https://gcc.gnu.org/install/index.html;https://gcc.gnu.org/;https://ftp.gnu.org/gnu/gcc/gcc-5.2.0/

    2024年02月14日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包