Paint.enableDithering 现在默认值为 true。
概述
#Paint.enableDithering
现在默认值为 true
(之前为 false
),并且正在被弃用,等待移除——Flutter 不再支持用户可配置的抖动设置。
此外,抖动文档指出支持仅用于渐变。
背景
#Paint.enableDithering
在 PR 13868 中被添加为全局选项,以响应 Issue 44134,该问题报告称 Flutter 中的渐变存在可见的色带伪影。
目前,所有设备上的渐变都存在严重的色带问题,在使用脉冲动画时也会显得非常奇怪。解决方案是将渐变设置为不透明,并使用 Skia 的抖动渐变。目前尚未公开抖动渐变,因此在 dart:ui 的 Paint 类中添加一个抖动参数将非常方便。我们可以通过 CustomPainter 手动绘制渐变。
Issue 118073 报告称,我们新的 Impeller 后端中的渐变在某些渐变中显示了可见的色带伪影。后来发现 Impeller 不支持(很少使用的) Paint.enableDithering
属性。
在为 Impeller 添加抖动支持(PR 44181、PR 44331、PR 44522)并审查了抖动的性能影响(可忽略不计)后,得出了以下观察结果:
- 大家一致认为渐变默认看起来效果很好:Issue 112498。
- 全局选项的意图是将其弃用:PR 13868。
这导致了以下决定:
- 默认启用抖动。
- 弃用全局选项。
- 在未来版本中移除全局选项。
在此过程中,在 PR 44730 和 PR 44912 中移除了抖动影响渐变以外任何内容的功能。这样做是为了简化迁移过程,因为 Impeller 永远不会支持除渐变以外的其他任何内容的抖动。
迁移指南
#大多数用户和库将不需要进行任何更改。
对于维护黄金测试的用户,您可能需要更新您的黄金图像以反映新的默认设置。例如,如果您使用 matchesGoldenFile
来测试包含渐变的 widget
flutter test --update-goldens
虽然这种情况不应常见,但您可以通过在 main()
方法中(无论是应用程序还是测试)设置 enableDithering
属性来暂时禁用抖动。
void main() {
// TODO: Remove this after XYZ.
Paint.enableDithering = false;
runApp(MyApp());
}
由于计划是永久移除 enableDithering
属性,如果您有需要禁用抖动的用例(由于性能、崩溃原因),请在 Issue 112498 中提供反馈。
如果出于某种原因您必须在没有抖动的情况下绘制渐变,您需要编写自己的自定义着色器。这超出了本迁移指南的范围,但您可以找到一些资源和示例:
注意:Flutter Web 不支持抖动:Issue 134250。
时间线
#已于版本:3.14.0-0.1.pre 登陆
稳定版本:3.16
参考资料
#API 文档
相关问题
相关 PR