Flutter 3.19有什么新性能?
视频
https://youtu.be/Dql8qw3XZyE
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 - 疾速上手
https://ducafecat.com/course/flutter-quickstart-learn
Flutter 实战1 - Getx Woo 电商APP
https://ducafecat.com/course/flutter-woo
- 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