跳至主要內容

Paint.enableDithering 現在預設為 true。

摘要

#

Paint.enableDithering 現在預設為 true (先前為 false),並且由於將被移除而已棄用 - Flutter 不再支援使用者可配置的抖動設定。

此外,抖動文件指出僅支援漸層。

背景

#

Paint.enableDithering 作為全域選項在 PR 13868 中加入,以回應 Issue 44134,該問題報告 Flutter 中的漸層具有可見的條帶偽影。

漸層目前在所有裝置上都有很多顏色條帶,而且在使用脈衝動畫時看起來也很奇怪。 一個解決方案是使漸層不透明,並將抖動的漸層與 Skia 一起使用。 目前未公開抖動漸層,因此在 dart:ui 的 Paint 類別中新增抖動參數會很好。 我們可以使用 CustomPainter 手動繪製漸層。

Example of banding

Issue 118073 報告我們新的 Impeller 後端的漸層在某些漸層中顯示出可見的條帶偽影。 後來發現 Impeller 不支援 (很少使用的) Paint.enableDithering 屬性。

在將抖動支援新增至 Impeller 後 (PR 44181, PR 44331, PR 44522),並檢閱抖動的效能影響 (可忽略),得出以下觀察結果

  1. 共識認為漸層預設看起來不錯: Issue 112498
  2. 全域選項本意是要棄用的: PR 13868

這導致以下決定

  1. 預設啟用抖動。
  2. 棄用全域選項。
  3. 在未來的版本中移除全域選項。

作為該過程的一部分,在 PR 44730PR 44912 中移除了抖動影響漸層以外的任何內容的能力。 這樣做的目的是為了簡化遷移過程,因為 Impeller 永遠不會支援漸層以外的抖動。

遷移指南

#

大多數使用者和函式庫都不需要進行任何變更。

對於維護黃金測試的使用者,您可能需要更新您的黃金影像,以反映新的預設值。 例如,如果您使用 matchesGoldenFile 來測試包含漸層的 Widget

flutter test --update-goldens

雖然這預計不是常見的情況,您可以透過在您的 main() 方法中 (在應用程式或測試中) 設定 enableDithering 屬性來暫時停用抖動

dart
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