前几天,Flutter 2.10 公布了正式版本,该版本间隔上个版本的公布还不到两个月工夫,但即便在这么短的工夫内,Flutter 曾经敞开了 1843 个问题,合并了 1525 个 PR。
在 2.10 版本中,次要的更新内容包含对 Flutter 的 Windows 反对的一个大更新,几个显著的性能改良,框架中的图标和色彩的新反对,以及一些工具的改良。此外,咱们还取得了一些对于删除开发频道、缩小对旧版本 iOS 的反对的更新,以及一些重大变动。
Flutter Windows 桌面端反对进入稳定版
Flutter 跨平台框架的目标就是致力于打造一个可能构建精美的、可高度定制的、并且能够编译为机器码的跨平台利用解决方案,以充分发挥设施底层硬件的全副图形渲染能力。当初,Flutter 对 Windows 生产版本的正式反对标记着这一愿景的实现。它使 Windows 开发者也能享受到挪动开发的雷同生产力和性能。
当然,Windows 上的 Flutter 应用程序除了能够应用 iOS 和 Android 上的大部分罕用 Flutter 框架外,它们也能够依据须要应用 Win32、COM 和 Windows Runtime APIs 等 Windows 特有的性能。同时,Google 还更新了一些常见的 Flutter 插件,以反对 Windows,如相机、file_picker 和 shared_preferences 等插件。
如果想要理解更多无关 Flutter For Windows 的内容,此文深度介绍了 Windows 上的 Flutter 架构,允以 Flutter 包和插件如何反对 Windows。
性能改良
此版本的 Flutter 对社区成员 knopp 提出的脏区域治理提供反对。如果启用此性能能够在 iOS/Metal 上为单个脏区域执行重绘。这一变动的益处是在一些基准上缩小了 90 到 99 个百分点的栅格化工夫(所谓栅格化,是指将矢量图形格局示意的图像转换成位图以用于显示器或者打印机输入的过程),并将这些基准上的 GPU 利用率从超过 90% 升高到不到 10%,如下图所示。
并且,咱们心愿在将来的版本中将局部重绘的益处带给其余平台。
在 Flutter 2.8 版本中,咱们取得了图片的录制过程。在 Flutter 2.10,咱们曾经开始优化构建过程。一个最显著的例子是,咱们在构建不通明层的时候基准中的帧光栅所花的工夫降落到了之前的三分之一以下。
随着咱们对图像构建流程的深刻,咱们心愿可能将这种优化扩大到更多的应用场景。
在 profile 和 release 模式下,Dart 代码会提前被编译为机器码。不过,这段代码的效率的要害是残缺的程序类型流剖析,它能够解锁许多编译器优化和踊跃的树状优化。然而,因为类型流剖析必须笼罩整个程序,它可能有点低廉。这个版本蕴含了一个更快的类型流剖析实现。从的来说,应用新的构建形式后,Flutter 应用程序的总体构建工夫降落了约 10%。
与以往的版本一样,性能加强、缩小内存应用和缩小提早是 Flutter 团队的须要解决的首要任务,咱们期待在将来的版本中失去进一步的改良。
iOS 更新
除了性能改良之外,咱们还新增了特定平台的个性和性能的加强。luckysmg 能够让键盘动画是 iOS 上更加晦涩,当须要弹出软键盘时,新的动画成果将会更加晦涩,而不须要开发中做任何的事件。
同时,咱们还改善了 iOS 相机插件的稳定性,修复了一些边缘状况下的解体。最初,64 位 iOS 架构压缩指针带来了内存应用的升高。
咱们晓得,64 位体系结构可能将指针示意为 4 字节的数据结构。当有很多对象时,指针自身占用的空间会减少应用程序的总内存应用,特地是遇到简单的应用程序时,有呈现更多的垃圾回收的状况。然而,iOS 应用程序不太可能有足够的对象来申请 32 位地址空间,更不用说更大的 64 位地址空间了。
Dart 2.15 版本提供了压缩指针,它能够缩小 64 位 iOS 应用程序的内存应用。相干介绍能够查看:Dart 2.15 的博客文章来理解细节。
Android 更新
当然,这个版本也蕴含了许多针对 Android 的改良。咱们晓得,默认状况下,当咱们创立一个新的 Flutter 应用程序时,Flutter 会默认反对最新版本的 Android。此外,在这个版本中,咱们还主动启用了 multidex 反对。如果您的应用程序反对 Android SDK 版本低于 21,并且超过 64K 办法限度,只需在应用 flutter build appbundle
或flutter build apk
命令时增加 --multidex
属性即可。
最初,咱们还修复了社区反馈的 Gradle 谬误。也正是出于这个起因,咱们在创立 Flutter 应用程序时,须要增加最低反对的 Android SDK 版本,如下所示。
当然,咱们持续跟踪社区反馈的问题,并在最新版本中提出修复计划。
Web 更新
这个版本在 Web 方面也进行了一些改良。例如,在以前的版本中,当在 web 上滚动到多行 TextField 的边缘时,它不会失常滚动。这个版本为文本抉择引入了边缘滚动,当抉择挪动到文本字段之外时,字段也能够滚动以查看滚动范畴。这种新行为实用于网页和桌面利用。
此外,这个版本的还提供了其余一些改良来晋升 Web 性能。咱们始终在寻找一种能够缩小 Web 性能开销的办法。在以前的版本中,咱们想把一个原生 HTML 小部件引入 Flutter 应用程序,咱们须要对 HTML 小部件进行笼罩重写,而后作为反对 web 的一部分。如果您的应用程序中有大量的原生 HTML 小部件,比方链接,这将减少大量的开销。在这个版本中,咱们为 web 创立了一个新的“非绘制平台视图”,从实质上打消了这种开销。咱们曾经利用了这个优化对链接小部件进行了解决,这意味着如果在你的 Web 应用程序中有很多链接,将不会有任何显著的开销。
素材
在这个版本咱们对整体的配色计划也进行了降级,包含反对突变色彩。
final lightScheme = ColorScheme.fromSeed(seedColor: Colors.green);
final darkScheme = ColorScheme.fromSeed(seedColor: Colors.green, brightness: Brightness.dark);
ThemeData 函数中有一个新的 colorSchemeSeed 参数,容许开发者生成须要的主题配色计划:
final lightTheme = ThemeData(colorSchemeSeed: Colors.orange, …);
final darkTheme = ThemeData(colorSchemeSeed: Colors.orange, brightness: Brightness.dark, …);
此外,这个版本提供的 ThemeData.useMaterial3
参数,能够将组件切换到新的 Material3 外观。并且,咱们还增加了 1028 个新的材质图标。
集成测试改良
在 2020 年 12 月,咱们提供了一个 integration_test 包进行端到端的测试。这个新包取代了 flutter_driver 包成为集成测试的举荐形式,并且还提供了新性能,比方 Firebase Test Lab 反对,以及对 web 和桌面的反对。
从那时起,咱们在集成测试方面做了进一步的改良,包含将 integration_test 包绑定到 Flutter SDK 自身,使它更容易与应用程序集成。如果想要将现有的 flutter_driver 测试迁徙到 integration_test,咱们也提供了迁徙指南。
Flutter 官网的文档、样例和代码也应用 integration_test 进行了更新。想要理解更多无关 integration_test 的内容,能够点击 Testing Flutter apps。
Flutter DevTools
在这个版本,咱们也对 Flutter DevTools 进行了降级和更新,包含一个易于应用的个性,如果咱们用命令行应用 DevTools,而不是应用 pub 全局激活来下载和执行最新版本。那么,当初咱们当初也能够应用 dart devtools
命令来取得最新的版本。
同时,咱们还做了一些可用性的更新,包含改良了在 Debugger 变量窗格中查看大型列表和地图的反对。
最初,诚邀官大开发中提供 DevTools 的应用体验并反馈给咱们,这将有助于咱们进行更深层次的改善和优化。
VSCode 改良
除此之外,Visual Studio 对 Flutter 的反对也失去了进一步的加强,包含代码中更多中央的色彩预览和色彩选择器,能够不便开发中查看成果。
此外,如果您想成为 VSCode 的 Dart 和 Flutter 预发行版本的测试人员,您能够在扩大设置中切换到预发行版本。
如果想要理解更多详细信息和内容,能够参考:
- VS Code extensions v3.32
- VS Code extensions v3.34
移除 dev channel
在 Flutter 2.8 版本中,咱们发表咱们正在致力移除 dev 渠道,简化你的抉择并缩小研发的开销。在这个版本中,咱们曾经实现了这项⼯作,包含:
- 更新 Flutter ⼯具以帮忙将开发⼈员迁徙出开发频道
- 更新 wiki 对于各个渠道的阐明和承诺
- 更新弃⽤政策
- 从 DartPad、预提交测试和⽹站中删除 dev 渠道的⽀持
Dev 渠道现已被彻底移除。如果咱们漏了一些没有移除的地位,请通知咱们。
对 iOS 9.3.6 的⽀持
因为咱们实验室中⽬标设施的使⽤缩小和保护难度减少,咱们正在 调整对于 iOS 9.3.6 的反对,从「⽀持」到「尽力⽽为」。这意味着对 iOS 9.3.6 的⽀持和对 32 位 iOS 设施的⽀持将仅通过编码实际、Ad-Hoc 和社区测试来维持。
咱们预计在 2022 年第三季度的 Flutter 稳固版本中放弃对 32 位 iOS 设施以及 iOS 版本 9 和 10 的 ⽀持。这意味着基于稳固的 Flutter SDK 构建的应⽤程序将不再在 32 位 iOS 设施上运行,并且 Flutter ⽀持 的最低 iOS 版本将减少到 iOS 11。
重大改变
咱们还致力在每个版本和此版本中缩小重大改变,只管咱们还没有齐全归零,但咱们会持续致力。
- Required Kotlin version
- Deprecated API removed after v2.5
- Raw images on Web uses correct origin and colors
- Scribble Text Input Client
如果你仍在使⽤这些 API,能够浏览 flutter.dev 上的迁徙指南。判若两人,⾮常感激社区奉献测试,帮忙咱们辨认这些破坏性改变。