Flutter 3.19有什么新功能?
视频
https://www.bilibili.com/video/BV1Ht421h7Pf/
前言
原文 https://ducafecat.com/blog/whats-new-in-flutter-3-19
通过Gemini API、Impeller更新和Windows Arm64支持,彻底改变应用开发方式
https://medium.com/flutter/whats-new-in-flutter-3-19-58b1aae2...
sdk 包下载
https://docs.flutter.dev/release/archive?tab=macos
正文
今天我们向您介绍一个新的Flutter版本,Flutter 3.19。此版本为Gemini带来了一个新的Dart SDK,该SDK使开发人员能够对小部件动画进行细粒度控制,通过对Impeller进行更新提升了渲染性能,提供了工具来帮助实现深链接,支持Windows Arm64等等!
Flutter社区继续给人留下深刻印象,由168名社区成员合并了1429个拉取请求,其中43名社区成员提交了他们的第一个Flutter拉取请求!
继续阅读以了解Flutter社区为这个最新版本做出的所有新增和改进!
AI integration 整合
Gemini Google AI Dart SDK beta release 测试版发布
Google AI Dart SDK已发布到beta版。这使您能够在Dart或Flutter应用程序中构建生成性AI功能,由Gemini提供支持,这是Google最新的AI模型系列。现在在pub.dev上有一个 google_generative_ai
包。在这篇博文中了解更多关于如何使用Google AI Dart SDK构建的信息,或者直接开始使用Dart快速入门。
https://pub.dev/packages/google_generative_ai
https://medium.com/flutter/harness-the-gemini-api-in-your-dar...
https://ai.google.dev/tutorials/dart_quickstart?hl=zh-cn
Framework 框架
Scrolling improvements 滚动改进
Flutter以前在拖动两个手指时会滚动两倍快。现在,您可以使用 MultiTouchDragStrategy.latestPointer
来配置默认的 ScrollBehavior
,以获得与手指数量无关的滚动行为。有关此更改的更多信息,请参阅迁移指南。
https://docs.flutter.dev/release/breaking-changes/multi-touch...
我们还为 SingleChildScrollView
和 ReorderableList
完成了错误修复,解决了一些报告的崩溃和意外行为。
在二维滚动中,我们解决了一个问题,现在,如果您在滚动进行中拖动或点击,滚动活动会按预期停止。
自上一次发布以来, two_dimensional_scrollables
包中的 TableView
小部件也已更新,提供了更多的优化,增加了对合并单元格的支持,并在3.16稳定版本发布后采用了更多2D基础的新功能。
AnimationStyle 动画风格
感谢Flutter社区成员@TahaTesser的贡献,Flutter现在有一个新的小部件,允许用户覆盖小部件中的默认动画行为,例如 MaterialApp
, ExpansionTile
和 PopupMenuButton
,为开发者提供了覆盖动画曲线和持续时间的能力。
https://github.com/flutter/flutter/pull/138721
SegmentedButton.styleFrom 分段按钮样式
Flutter社区成员@AcarFurkan添加了一个静态实用方法,就像其他按钮类型提供的方法一样。该方法可以快速创建一个可以与其他分段按钮共享或用于配置应用程序的 SegmentedButtonTheme
的 ButtonStyle
。
Adaptive Switch 自适应开关
这个自适应组件在 macOS 和 iOS 上看起来和感觉像本地应用,而在其他地方则具有 Material Design 的外观和感觉。它不依赖于 Cupertino 库,因此在所有平台上的 API 完全相同。
请参阅 Switch.adaptive
构造函数API页面上的自适应开关拉取请求和实时示例。
https://github.com/flutter/flutter/pull/130425
https://api.flutter.dev/flutter/material/Switch/Switch.adapti...
SemanticsProperties accessibility identifier 语义属性可访问标识符
SemanticsProperties
中的新可访问性标识符为本机可访问性层次结构中的语义节点提供了一个标识符。在Android上,它显示在可访问性层次结构中的 resource-id
。在iOS上,它设置为 UIAccessibilityElement.accessibilityIdentifier
。我们要感谢社区成员@bartekpacia对这个跨越引擎和框架的更改的贡献。
https://github.com/flutter/engine/pull/47961
Increased access to text widget state 增加对文本小部件状态的访问
我们在 MaterialStatesController
中添加了对 TextField
和 TextFormField
的支持,这样您就可以听到 MaterialState
的变化。
UndoHistory stack 撤销历史堆栈
我们修复了一个问题,即在日语键盘上,撤销/重做历史记录可能会消失。现在您可以在将条目推送到堆栈之前修改它。
https://github.com/flutter/flutter/pull/138674
https://github.com/flutter/flutter/issues/130881
Engine 引擎
Impeller progress 进展
Android OpenGL preview 预览
在3.16稳定版本中,我们邀请用户在支持Vulkan的Android设备上尝试使用Impeller,覆盖了77%的Android设备。在过去的几个月中,我们已经将Impeller的OpenGL后端与Vulkan后端的功能达到了相同水平,例如,添加了对MSAA的支持。这意味着几乎所有Android设备上的Flutter应用都能正确渲染,除了一小部分即将推出的功能,例如自定义着色器和对外部纹理的完全支持。
https://github.com/flutter/engine/pull/47030
MSAA 是多重采样抗锯齿(Multisample Anti-Aliasing)的缩写。在图形学中,抗锯齿是一种用来减少图像中锯齿状边缘(也称为走样)的技术。MSAA 是一种抗锯齿技术,通过在图像渲染过程中对多个采样点进行颜色混合,以减少锯齿状边缘的出现。
我们要求Flutter开发者升级到最新的稳定版本,并在启用Impeller时报告任何观察到的不足之处。在这个阶段的反馈对于确保Impeller在Android上成功,并且我们可以自信地在今年晚些时候的发布中将其作为默认渲染器非常宝贵。Android硬件生态系统比iOS生态系统更加多样化。因此,关于Impeller的最有帮助的反馈应包括有关出现问题的具体设备和Android版本的详细信息。
https://docs.flutter.dev/perf/impeller#android
此外,作为提醒,Impeller的Vulkan后端在调试构建中提供了比Skia更多的调试能力,并且这些能力会增加额外的运行时开销。因此,从配置文件或发布构建中提供有关Impeller性能的反馈非常重要。错误报告应包括来自DevTools的时间线,并与同一设备上的Skia后端进行比较。最后,一如既往,我们非常感谢包含一个能够演示问题的小型可重现测试案例的反馈。
https://docs.flutter.dev/testing/build-modes#profile
https://docs.flutter.dev/testing/build-modes#release
Roadmap 路线图
https://github.com/flutter/flutter/wiki/Roadmap
在提供高保真度的渲染后,我们在Impeller的Android预览期间的主要关注点是性能。我们持续进行渐进式的改进,但也有一些较大的改进正在进行中。我们预计通过利用Vulkan子通道来大大提高高级混合模式的性能。此外,我们还预计从在CPU上始终对每个路径进行细分的渲染策略转向先使用模板再覆盖的方法,将大大减少Impeller在Android和iOS上的CPU利用率。最后,我们预计新的高斯模糊实现将与Skia实现的吞吐量相匹配,并改善在iOS上使用模糊的惯用方式。
https://github.com/flutter/flutter/issues/128911
https://github.com/flutter/flutter/issues/137714
https://github.com/flutter/flutter/issues/131580
API improvements 改进
Glyph Information 字形信息
此版本包含 dart:ui
的 Paragraph
对象上的两个新方法: getClosestGlyphInfoForOffset
和 getGlyphInfoAt
,每个方法返回一个新类型 GlyphInfo
的对象。请查看有关新 GlyphInfo
类型的文档。
GPU tracing 追踪
在Metal(iOS、macOS、模拟器)和支持Vulkan的Android设备上,Flutter引擎现在在调试和性能分析版本中在时间轴上报告每帧的GPU时间。可以在DevTools中的“GPUTracer”标题下检查GPU帧时间。
请注意,由于非Vulkan Android设备可能错误地报告其对查询GPU计时的支持,因此在这些设备上,只能通过在 AndroidManifest.xml
文件中设置标志来启用Impeller的GPU跟踪功能。
<meta-data
android:name="io.flutter.embedding.android.EnableOpenGLGPUTracing"
android:value="true" />
Performance optimizations 性能优化
Specialization constants 专业化常数
团队为Impeller添加了对专业常量的支持。利用Impeller的着色器中的这一特性,减少了Flutter引擎未压缩二进制文件的大小近350KB。
https://github.com/flutter/flutter/issues/119357
https://flutter-flutter-perf.skia.org/e/?begin=1698877815&end...
Backdrop filter speedups 背景滤镜加速
然而,还有很多工作要做,但是这个版本包括了一些对Impeller的背景滤镜和模糊效果的良好性能改进。特别是,开源贡献者@knopp注意到Impeller错误地请求从屏幕纹理中读取的能力。移除了这个能力后,根据复杂程度,我们的基准测试显示,包含多个背景滤镜的场景的性能提升了20-70%。
此外,Impeller不再无条件地在每个背景滤镜上存储模板缓冲区。相反,任何影响操作的剪辑都会被记录下来,并在恢复背景滤镜的保存层时重新播放到新的模板缓冲区中。
https://github.com/flutter/engine/pull/47397
通过这个改变,我们在使用Vulkan后端的Pixel 7 Pro上运行Impeller时,对于动画高级混合模式的基准测试,平均GPU帧时间从55毫秒提升到16毫秒,并且将90%的光栅线程CPU时间从大约110毫秒降低到22毫秒。
Android 安卓
Deeplinking web validator 深度链接网页验证器
我们从开发者那里了解到,深度链接(将用户从网页URL导航到移动应用程序的特定页面)一直很难实现,而且容易出错。因此,我们首先创建了一个验证工具,以帮助开发者了解哪些链接配置不正确,并提供实施指导。我们非常高兴地分享,Flutter深度链接验证器的早期版本现已可用!
在这个早期版本中,Flutter深链接验证器支持在Android上进行Web检查,这意味着验证您的 assetlinks.json
文件的设置。您可以打开DevTools,点击进入Deep Links选项卡,并导入一个包含深链接的Flutter项目。深链接验证器会告诉您您的Web文件是否配置正确。您可以参考深链接验证工具的测试说明获取更多信息。
https://docs.google.com/document/d/1fnWe8EpZleMtSmP0rFm2iulqS...
我们希望这个工具是简化您的深度链接实施过程的第一步。我们将继续努力提供对iOS上的网页检查和对iOS和Android上的应用检查的未来支持!
Support for Share.invoke 支持
文本字段和视图上的默认共享按钮在Android上以前是缺失的,但我们在这个版本中添加了它,作为我们持续努力的一部分,以确保每个平台上都有所有默认上下文菜单按钮。您可以在PR#107578中跟踪这个持续的工作。
https://github.com/flutter/flutter/issues/107578
Native assets feature 本地调用
如果您对Flutter与其他语言的函数在Flutter代码中的互操作性感兴趣,您现在可以通过Android上的本地资源执行FFI调用,这是我们支持本地资源的持续工作的一部分。
https://github.com/flutter/flutter/issues/129757
Texture Layer Hybrid Composition (TLHC) mode 纹理层混合组合
Flutter 3.19包含了使谷歌地图和文本输入放大器在TLHC模式下工作的功能,这意味着您的应用程序性能更好。如果您正在使用谷歌地图,请测试这些更改并告诉我们您的反馈!
这项工作不包括框架或引擎的提交,但您可以在PR 5408中看到该工作,以及测试THLC的步骤。
https://github.com/flutter/packages/pull/5408
Custom system-wide text selection toolbar buttons 自定义系统范围的文本选择工具栏按钮
Android应用程序可以添加自定义文本选择菜单项,这些菜单项会出现在所有文本选择菜单中(即长按文本时出现的菜单)。Flutter的 TextField
选择菜单现在包含了这些项目。
iOS
Flutter iOS native fonts Flutter iOS原生字体
Flutter的文本在iOS上看起来更加紧凑和本地化。根据苹果的设计指南,iOS上的较小字体应该更加分散以便在移动设备上更容易阅读,而较大字体应该更加紧凑以节省空间。以前,我们在所有情况下错误地使用了较小、更分散的字体。现在,默认情况下,Flutter将对较大的文本使用紧凑字体。
DevTools 开发工具
DevTools updates 开发工具更新
这个版本的DevTools的一些亮点是:
- 在DevTools中添加了一个新功能和屏幕,用于验证Android上的深度链接设置。
- 在增强跟踪菜单中添加了一个选项,用于跟踪平台通道活动。这对于带有插件的应用程序非常有用。
- 当没有连接的应用程序时,现在可以使用性能和CPU分析器屏幕。之前从DevTools保存的性能数据或CPU配置文件可以从这些屏幕重新加载以供查看。
- Flutter侧边栏在VS Code中现在具有启用新平台的功能(如果当前项目未启用),并且侧边栏中的DevTools菜单现在有一个选项可以在外部浏览器窗口中打开DevTools。
要了解更多信息,请查看DevTools的发布说明,包括, 2.29.0, 2.30.0, 和 2.31.0 。
Desktop 桌面
Windows Arm64 support Windows Arm64支持
Flutter在Windows上现在开始支持Arm64架构,这要归功于社区成员@pbo-linaro的可赞赏的努力。这项初步支持为在Windows Arm64设备上本地运行的Flutter应用程序提供了更高效和更高性能的方式。尽管仍在开发中,但可以在GitHub问题#62597上跟踪进展,这一举措意味着对于希望优化其应用程序以适应更广泛的Windows设备的Flutter开发人员来说,这是一个有希望的增强。
https://github.com/flutter/flutter/issues/62597
Ecosystem 生态系统
Required reason privacy manifest 所需的原因隐私清单
Flutter现在在iOS上包含了一个隐私清单,以满足即将到来的苹果要求。
https://developer.apple.com/support/third-party-SDK-requireme...
Progress of the Flutter and Dart package ecosystem 生态系统的进展
如果你错过了,可以查看一月份关于Flutter和Dart软件包生态系统进展的博客文章。
https://medium.com/flutter/progress-of-the-flutter-package-ec...
Deprecations and breaking changes 弃用和破坏性变更
Dropping Windows 7 and 8 support 放弃对Windows 7和8的支持
随着Flutter的发展,我们很高兴通过Dart 3.3和Flutter 3.19版本的发布来关注最新的技术,结束对Windows 7和8的支持。这一转变与微软的战略一致,使我们能够增强在现代操作系统上的Flutter。我们感谢开发者所需的调整,并致力于在这个过渡期间为您提供帮助。这一举措为在支持的Windows版本上打造一个更安全、高效和功能丰富的开发环境铺平了道路。感谢您的理解和适应能力,让我们在Flutter生态系统中继续共同创新。
Impeller dithering flag
正如3.16稳定版本的发布说明中所提到的,全局标志 Paint.enableDithering
已被移除。有关详细信息,请参阅网站上的重大变更公告。
https://github.com/flutter/engine/pull/46745
https://docs.flutter.dev/release/breaking-changes/paint-enabl...
Deprecate iOS 11 废弃
由于在调用某些网络API时发生运行时崩溃,Flutter不再支持iOS 11。这意味着使用Flutter 3.16.6及更高版本构建的应用程序将无法在这些设备上运行。
https://github.com/flutter/flutter/issues/136060
Deprecate auto render mode 废弃自动渲染模式
此版本中的重大变更包括在v3.16发布后过期的已弃用API。要查看所有受影响的API以及其他上下文和迁移指南,请参阅此版本的弃用指南。其中许多弃用功能都受到Flutter修复程序的支持,包括IDE中的快速修复。批量修复可以使用 dart fix
命令行工具进行评估和应用。
https://docs.flutter.dev/release/breaking-changes
https://docs.flutter.dev/release/breaking-changes/3-16-deprec...
https://docs.flutter.dev/tools/flutter-fix
一如既往,非常感谢社区为我们贡献的测试,这些测试有助于我们识别这些破坏性变更。要了解更多信息,请查阅Flutter的破坏性变更政策。
https://github.com/flutter/tests/blob/master/README.md
https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes
这是第一个采用flutter_driver包的发布版本,除了已支持的flutter和flutter_test包之外,还采用了弃用策略。
Conclusion 结论
正如我们在这个公告的开头强调的那样,我们这样做是有目的的。Flutter的发展成为一个强大高效的工具包,直接证明了我们令人难以置信的社区的奉献和辛勤工作。衷心感谢每一个人。
要深入了解此版本所取得的具体成果,我们邀请您查看Flutter 3.19的发布说明和变更日志,以获取完整的新增内容列表。
https://docs.flutter.dev/release/release-notes/release-notes-...
Flutter 3.19,与Dart 3.3一同,现已在稳定通道上可用。开始使用Flutter的最新版本就像运行flutter upgrade一样简单。
https://medium.com/dartlang/new-in-dart-3-3-extension-types-j...
感谢阅读本文
如果有什么建议,请在评论中让我知道。我很乐意改进。
flutter 学习路径
- Flutter 优秀插件推荐
https://flutter.ducafecat.com - Flutter 基础篇1 - Dart 语言学习
https://ducafecat.com/course/dart-learn Flutter 基础篇2 - 快速上手
Flutter 实战1 - Getx Woo 电商APP
- Flutter 实战2 - 上架指南 Apple Store、Google Play
https://ducafecat.com/course/flutter-upload-apple-google - Flutter 基础篇3 - 仿微信朋友圈
https://ducafecat.com/course/flutter-wechat - Flutter 实战3 - 腾讯 tim 即时通讯开发
https://ducafecat.com/course/flutter-tim
© 猫哥
ducafecat.com
end
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。