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
除非另有說明,本網站上的文件反映了 Flutter 的最新穩定版本。 頁面最後更新於 2024-08-16。 檢視原始碼 或 回報問題。