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