即刻体验 | 使用 Flutter 3.19 更高效地开发
Gemini Google AI Dart SDK
测试版发布
google_generative_ai
https://pub.dev/packages/google_generative_ai
此博文
http://docs.google.com/flutter/harness-gemini-in-your-dart-and-flutter-apps-00573e560381
Dart 快速入门
https://ai.google.dev/tutorials/dart_quickstart
滚动优化
迁移指南
https://docs.flutter.dev/release/breaking-changes/multi-touch-scrolling
我们还完成了 SingleChildScrollView 和 ReorderableList 的错误修复,解决了多个报告的崩溃和意外行为问题。
SingleChildScrollView https://github.com/flutter/flutter/pull/136871 ReorderableList https://github.com/flutter/flutter/pull/136828
我们还解决了一个关于二维滚动的问题,现在当您在任一方向进行滚动操作时,如果进行拖动或点按,滚动活动将按预期停止。
自上次发布以来,我们对 two_dimensional_scrollables package 中的 TableView Widget 也进行了更新。此次更新改善了其整体表现、增加了对合并单元格的支持,并且在 Flutter 3.16 稳定版发布后,采用了更多二维滚动基础组件的新功能。
AnimationStyle
得益于 Flutter 社区成员 @TahaTesser 的贡献,Flutter 现在新增了一个名为 AnimationStyle 的 Widget。该 Widget 可让用户覆盖 MaterialApp、ExpansionTile 和 PopupMenuButton 等 Widget 中的默认动画行为,帮助开发者覆盖动画曲线和时长。
@TahaTesser
https://github.com/TahaTesser
贡献
https://github.com/flutter/flutter/pull/138721
SegmentedButton.styleFrom
Flutter 社区成员 @AcarFurkan 添加了一个 styleFrom 静态实用方法,类似于其他按钮类型所提供的方法,能够快速创建 SegmentedButton 的 ButtonStyle,与其他分段按钮共享,或者用于配置应用的 SegmentedButtonTheme。
@AcarFurkan https://github.com/AcarFurkan
自适应开关
自适应开关拉取请求
https://github.com/flutter/flutter/pull/130425
API 页面
https://api.flutter.dev/flutter/material/Switch/Switch.adaptive.html
SemanticsProperties 可访问性标识符
SemanticsProperties 中新增了一个可访问性标识符,用于为原生可访问性层级中的语义节点提供标识符。在 Android 平台上,这个标识符会以 resource-id 的形式出现在可访问性层级结构中;在 iOS 平台上,该标识符会设置 UIAccessibilityElement.accessibilityIdentifier。感谢社区成员 @bartekpacia 对这一涉及到引擎和框架层面的改变所做出的贡献。
@bartekpacia https://github.com/bartekpacia 引擎 https://github.com/flutter/engine/pull/47961 框架 https://github.com/flutter/flutter/pull/138331
增加了对文本 Widget 状态的访问权限
我们在 TextField 和 TextFormField 中增加了对 MaterialStatesController 的支持,以便您监听 MaterialState 的变化情况。
UndoHistory 堆栈
我们修复了在日语键盘上撤销/重做历史记录可能会消失的问题。现在您可以在条目被推送到 UndoHistory 堆栈之前对其进行修改。
修复了
https://github.com/flutter/flutter/pull/138674
问题
https://github.com/flutter/flutter/issues/130881
Impeller 进展
对 MSAA 的支持
https://github.com/flutter/engine/pull/47030
请各位 Flutter 开发者升级到最新稳定版。在启用 Impeller 后,如果遇到任何问题,欢迎您随时提交相关报告。当前阶段的反馈对于确保 Impeller 能在 Android 平台上取得成功,以及我们能够在今年晚些时候有把握地将其设为默认渲染器至关重要。由于 Android 硬件生态系统比 iOS 生态系统更加多样化,因此关于 Impeller 的最有效的反馈需要包含出现问题的具体设备型号和所使用的 Android 版本的详细信息。
启用 Impeller https://docs.flutter.dev/perf/impeller#android
此外,您还需注意,Impeller 的 Vulkan 后端在调试 build 中可提供比 Skia 后端更多的调试功能,且这些功能会产生额外的运行时消耗。因此,我们建议您通过配置文件 build 或发布 build 提供关于 Impeller 性能的反馈。Bug 报告需要包含来自 DevTools 的时间线数据,以及在同一设备上与 Skia 后端的性能对比数据。最后,我们一如既往地感谢大家提供包含对可复现问题的小型案例加以说明等反馈。
调试 https://docs.flutter.dev/testing/build-modes#debug 配置文件 https://docs.flutter.dev/testing/build-modes#profile 发布 https://docs.flutter.dev/testing/build-modes#release
Vulkan 子通道
https://github.com/flutter/flutter/issues/128911
Stencil-then-cover
https://github.com/flutter/flutter/issues/137714
高斯模糊
https://github.com/flutter/flutter/issues/131580
API 改进
字形信息
GlyphInfo
https://main-api.flutter.dev/flutter/dart-ui/GlyphInfo-class.html
请注意,由于不支持 Vulkan 的 Android 设备可能会错误报告其对于查询 GPU 时间的支持情况,因此,在这些设备上,Impeller 的 GPU 跟踪功能只能通过在 AndroidManifest.xml 文件中设置标志来启用。
<meta-data
android:name="io.flutter.embedding.android.EnableOpenGLGPUTracing"
android:value="true" />
性能优化
特化常量
我们的团队为 Impeller 添加了特化常量支持。通过在 Impeller 的着色器中利用这一功能,Flutter 引擎的未压缩二进制文件大小减少了将近 350 KB。
特化常量支持 https://github.com/flutter/flutter/issues/119357 将近 350 KB https://flutter-flutter-perf.skia.org/e/?begin=1698877815&end=1702074996&queries=test%3Dhello_world_ios__compile&requestType=0&selected=commit%3D37892%26name%3D%252Carch%253Darm%252Cbranch%253Dmaster%252Cconfig%253Ddefault%252Cdevice_type%253DiPhone_11%252Cdevice_version%253Dnone%252Chost_type%253Dmac%252Csub_result%253Dflutter_framework_uncompressed_bytes%252Ctest%253Dhello_world_ios__compile%252C
@knopp
https://github.com/knopp
注意到
https://github.com/flutter/flutter/issues/131567#issuecomment-1678210475
移除这一功能后
https://github.com/flutter/engine/pull/47808
此外,Impeller 不再对每一个背景滤镜都无条件地存储模板缓冲区。相反,它现在会记录任何影响剪辑的操作,并在为背景滤镜恢复保存层时,将这些操作重放到一个新的模板缓冲区中。
无条件地存储模板缓冲区 https://github.com/flutter/engine/pull/47397
深层链接 Web 验证器
测试说明 https://docs.google.com/document/d/1fnWe8EpZleMtSmP0rFm2iulqS3-gA86z8u9IsnXjJak/edit?tab=t.0
Share.invoke 支持
Android 平台之前缺少文本字段和视图上的默认分享按钮,但在本次发布中我们已经将其添加进来。这是我们持续努力的见证,旨在确保每个平台上的所有默认上下文菜单按钮都可用。您可以通过 PR #107578 持续关注进展情况。
PR #107578 https://github.com/flutter/flutter/issues/107578
Native Assets 功能
如果您对 Flutter 与 Flutter 代码中其它语言函数的互操作性感兴趣,您现在可以在 Android 平台上通过 Native Assets 执行 FFI 调用。随时了解我们支持 Native Assets 功能的持续进展。
持续进展 https://github.com/flutter/flutter/issues/129757
纹理层混合组合 (TLHC) 模式
PR 5408
https://github.com/flutter/packages/pull/5408
自定义系统范围内的文本选择工具栏按钮
Flutter iOS 原生字体
DevTools 更新
在 DevTools 中添加了一个新功能和屏幕,用于验证 Android 平台上的深层链接设置。
在 "增强跟踪" (Enhance Tracing) 菜单中添加了一个选项,用于跟踪平台渠道活动。这对于带有插件的应用很有帮助。
性能和 CPU 分析器屏幕现在即使在没有连接任何应用的情况下也可访问。之前通过 DevTools 保存的性能数据或 CPU 配置文件,现在可以从这些屏幕上重新加载并查看。 VS Code 中的 Flutter 侧边栏现在增加了新功能: 如果当前项目尚未启用新平台,用户可以直接启用新的平台。此外,侧边栏上的 DevTools 菜单现在提供一个选项,可让用户在外部浏览器窗口中打开 DevTools。
如要了解更多信息,您可以查看 DevTools 2.29.0、2.30.0 和 2.31.0 的版本说明。
2.29.0 https://docs.flutter.dev/tools/devtools/release-notes/release-notes-2.29.0 2.30.0 https://docs.flutter.dev/tools/devtools/release-notes/release-notes-2.30.0 2.31.0 https://docs.flutter.dev/tools/devtools/release-notes/release-notes-2.31.0
Windows Arm64 支持
感谢社区成员 @pbo-linaro 的不懈努力,Flutter 在 Windows 平台上现已初步支持 Arm64 架构。这一初始支持为 Flutter 应用能在 Windows Arm64 设备上更加高效且高性能地原生运行奠定了基础。尽管这项支持功能仍在开发阶段 (您可以在 GitHub 问题 #62597 上跟踪进展),但这标志着 Flutter 开发者为在更广泛的 Windows 设备上优化其运用的运行迈出了卓越的一步。
@pbo-linaro https://github.com/pbo-linaro #62597 https://github.com/flutter/flutter/issues/62597
必须提供隐私清单
Flutter 现在在 iOS 平台上包含了隐私清单,以满足即将出台的 Apple 要求。
即将出台的 Apple 要求 https://developer.apple.com/support/third-party-SDK-requirements/
Flutter 和 Dart Package
生态系统的进展
如果您之前错过了相关信息,欢迎查看我们关于 Flutter 和 Dart Package 生态系统进展的博客文章。
Flutter 和 Dart Package 生态系统进展 http://docs.google.com/flutter/progress-of-the-flutter-package-ecosystem-17cded9a0703
放弃对 Windows 7
和 Windows 8 的支持
随着 Flutter 的不断发展,我们在 Dart 3.3 和 Flutter 3.19 版本终止了对 Windows 7 和 Windows 8 的支持,进而专注于最新的技术。这一调整符合 Microsoft 的战略,使我们能够在现代操作系统上进一步增强 Flutter 的功能。我们深知这可能需要开发者们做出相应的调整,并承诺将全力协助您顺利完成过渡。此举为在受支持的 Windows 版本上构建一个更安全、高效且功能丰富的开发环境奠定了基础。感谢您的理解和努力适应,在 Flutter 生态系统中,我们将继续携手创新,共同进步。
Impeller 抖动效果标志
Flutter 3.16 稳定版的版本说明中指出,全局标志 Paint.enableDithering 已被移除。有关详细信息,您可以参阅官方网站上的重大变更公告。
移除 https://github.com/flutter/engine/pull/46745 重大变更公告 https://docs.flutter.dev/release/breaking-changes/paint-enableDithering
放弃对 iOS 11 的支持
由于调用特定网络 API 时会出现运行时崩溃问题,Flutter 不再支持 iOS 11。这意味着针对 Flutter 3.16.6 及更高版本构建的应用将无法在此类设备上运行。
运行时崩溃 https://github.com/flutter/flutter/issues/136060
弃用自动渲染模式
在此版本的重大变更中,我们宣布了一些已弃用的 API,这些 API 对 v3.16 之后的版本不再有效。如要查看所有受影响的 API 及其附加背景信息和迁移指南,您可以参阅此版本的弃用指南。许多弃用的 API 都受到 Flutter fix 的支持,包括 IDE 中的快速修复功能。您可以通过 dart fix 命令行工具来批量评估并应用修复。
重大变更 https://docs.flutter.dev/release/breaking-changes 此版本的弃用指南 https://docs.flutter.dev/release/breaking-changes/3-16-deprecations Flutter fix https://docs.flutter.dev/development/tools/flutter-fix
为测试工作所做的贡献
https://github.com/flutter/tests/blob/master/README.md
Flutter 的重大变更政策
https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes
在此次发布中,除了已支持的 flutter 和 flutter_test package 之外,flutter_driver package 也首次被纳入了弃用策略之中。
版本说明和更新日志
https://docs.flutter.dev/release/release-notes/release-notes-3.19.0
Dart 3.3
https://medium.com/dartlang/new-in-dart-3-3-extension-types-javascript-interop-and-more-325bf2bf6c13