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