1,426
社区成员
随着 Google I/O 2023 的发布, Flutter 3.10 和 Dart 3.0 也都正式发,不得不说如今 Dart 的版本号终于快追上 Flutter 得版本号了,特别随着 Dart 3 的发布, Flutter 在 records 和 patterns 的加持下,开发体验终于开始步入现代化语言的进程。
对于 Flutter 开发者来说,Flutter 3.10 和 Dart 3.0 可以说是新的分水岭,详细介绍可见下方链接,接下来我们就来简单总结一下吧。
Flutter 3.10 主要包括有对 Web、mobile、graphics、安全性等方面的相关改进,核心其实就是:
众所周知,Flutter是建立在Dart语言基础上的,本次大会上,Dart发布了一个大的版本,这是编程语言的重大更新。
(Flutter 的安装说明可在docs.dev.flutter找到,Dart SDK 的安装说明可在dart.dev找到。)Dart 3现在作为稳定版本提供,包含以下三项主要改进:
Dart 的构建者也一直致力于将 Dart 编译为 Wasm 二进制格式,目标是在浏览器中带来更快的加载速度并提高 Web 应用程序的性能。Dart 到Wasm 的编译现在正在预览中。要编译为 Wasm,开发人员需要支持WasmGC 的浏览器。
Flutter 3.10改进了对 Material 3 widget 工具包的支持,包括对 Material 3 算法配色方案生成的支持,以及一些使构建 macOS 和 iOS 应用程序更容易的改进。后者包括在可编辑文本小部件中添加拼写检查支持、一个新的复选框小部件以及对无线调试的支持。Impeller 渲染器从 Flutter 3.7 开始预览,现在是 iOS 上的默认渲染器,承诺更少的卡顿和更一致的性能。
Flutter 3.10 中还有一个 JNI 桥接器,用于连接用Kotlin编写的 Jetpack 库,无需外部插件即可直接从 Dart 调用新的 Jetpack 库。
Google在大会上,对 Flutter 的总体目标是提供五个核心特性:
3.10 版本涵盖了除 Impeller 之外还有更多性能改进和修复。
此更改消除了最近 iOS 120Hz 显示器上的低帧率问题,在某些情况下它会使帧速率增加三倍,这帮助我们解决了六个 GitHub issue。
这一变化具有意义重大,以至于我们向后移植了一个修补程序到 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 .1,这将大型应用的启动延迟减少了 100 毫秒或大约 30–50%。
缩小尺寸
Flutter 使用 SkParagraph
作为文本、布局和渲染的默认库,之前我们包括了一个标志以支持回退到遗留 libtxt
和 minikin
。
由于我们对 SkParagraph
有充分的信心,我们在 3.10 中删除了 libtxt
和 minikin
以及它们的标志,这将 Flutter 的压缩大小减少了 30KB。
在 3.0 版本中,我们在渲染管道后期启用了一项 Android 功能,该功能使用高级 GPU 驱动,当只有一个“dirty” 区域发生变化时,这些驱动功能会重新绘制较少的屏幕内容。
我们之前已经将它添加到早期的优化中以达到类似的效果,尽管我们的基准测试结果不错,但还是出现了两个问题:
鉴于有限的进步和支持,我们在 Android 上禁用了部分重绘功能。
而使用 Skia 后端时,该功能在 iOS 上依然保持启用状态,我们希望在未来的版本中可以通过impeller启用他。
当 PlatformViews
出现在屏幕上时,Flutter会限制 iOS 上的刷新率以减少卡顿,当应用显示动画或可滚动时,用户可能会在应用出现 PlatformViews
时注意到这一点。
Flutter 现在支持插件 pubspec.yaml
文件中的 sharedDarwinSource
,这个 key 表示 Flutter 应该共享 iOS 和 macOS 代码。
ios: pluginClass: PathProviderPlugin dartPluginClass: PathProviderFoundation sharedDarwinSource: true
macos: pluginClass: PathProviderPlugin dartPluginClass: PathProviderFoundation sharedDarwinSource: true
我们为 Flutter 开发人员添加了使用 iOS 应用扩展文档,这些扩展包括实时活动、主屏幕控件和共享扩展。
为了简化创建主屏幕控件和共享数据,我们向 path_provider
和 homescreen_widget
插件添加了新方法。
我们继续改进了 DevTools,这是一套用于 Dart 和 Flutter 的性能和调试工具,一些亮点包括:
Perfetto 可以处理更大的数据集,并且比传统的跟踪查看器表现得更好,例如:
弃用的 API
3.10 中的重大更改包括在 v3.7 发布后过期的弃用 API。。
将 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 版本之间的不兼容而发生此错误。
要了解修复此错误的不同方法,请查看我们的迁移指南:docs.flutter.dev/go/android-…
Window singleton 弃用
该版本弃用了 Window singleton,依赖它的应用和库需要开始迁移
当你的应用在未来版本的 Flutter 中做支持时,这会可以为你的应用提前做好多窗口准备支持。
以上就是 Flutter 3.10 的主要变化和功能 , Flutter是一种移动应用程序开发框架,可以用于开发iOS和Android应用程序。期待 Fiutter 的新的征程,新的起点 !!