ThemeData 的 accent 屬性已被棄用
摘要
#ThemeData 的 accentColor、 accentColorBrightness、 accentIconTheme 和 accentTextTheme 屬性已被棄用。
Material Design 規範不再指定或使用 Material 元件的「強調 (accent)」顏色。元件顏色的預設值是從整體主題的 色彩配置 (color scheme) 衍生而來。ColorScheme
的 secondary 顏色現在通常用來取代 accentColor
,而當需要對比顏色時則使用 onSecondary 顏色。
背景
#這項變更只是 Material 主題系統更新專案的一小部分。
在 Flutter 1.17 中,Material 函式庫不再使用 ThemeData 的強調屬性 (accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme)。它們已由主題的 colorScheme
和 textTheme
屬性的相依性所取代,這也是使 Material 元件的預設組態幾乎完全依賴這兩個屬性的長期目標的一部分。
這些變更的目的是使主題系統更容易理解和使用。所有元件的預設顏色都由元件本身定義,並以色彩配置為基礎。特定元件類型的預設值可以使用特定於元件的主題 (例如 FloatingActionButtonThemeData
或 CheckBoxTheme
) 來覆寫。先前,一些元件類型僅在某些情況下使用像是 accentColor 這類的屬性,這使得難以理解覆寫它們的影響。
變更說明
#ThemeData 的 accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme 屬性已被棄用,因為 Material 函式庫不再使用它們。
遷移指南
#應用程式主題
#ThemeData
值不再需要指定 accentColor、accentColorBrightness、accentIconTheme 或 accentTextTheme。
若要以與先前大致相同的方式設定 Material 元件的外觀,請指定色彩配置的 secondary 顏色,而非 accentColor。
遷移前的程式碼
MaterialApp(
theme: ThemeData(accentColor: myColor),
// ...
);
遷移後的程式碼
final ThemeData theme = ThemeData();
MaterialApp(
theme: theme.copyWith(
colorScheme: theme.colorScheme.copyWith(secondary: myColor),
),
//...
)
accentColor
#最接近向後相容的 ColorScheme
顏色是 ColorScheme.secondary
。若要盡可能貼近最新的 Material Design 指南,可以使用 ColorScheme.primary
來取代。如果需要對比色,則使用 ColorScheme.onSecondary
。
先前會查詢主題的 accentColor 的自訂元件,現在可以查詢 ColorScheme.secondary
來取代。
遷移前的程式碼
Color myColor = Theme.of(context).accentColor;
遷移後的程式碼
Color myColor = Theme.of(context).colorScheme.secondary;
accentColorBrightness
#靜態的 ThemeData.estimateBrightnessForColor()
方法可用於計算任何顏色的亮度。
accentTextTheme
#在深色主題中,這是白色的 TextStyle
,在淺色主題中則是黑色的 TextStyle。在大多數情況下,可以使用 textTheme 來取代。一種常見的用法是參考 accentTextTheme 中的一個 TextStyle,因為該文字樣式的顏色保證能與強調色 (現在是 ColorScheme.secondaryColor
) 形成良好的對比。若要獲得相同的結果,現在請將文字樣式的顏色指定為 ColorScheme.onSecondary
遷移前的程式碼
TextStyle style = Theme.of(context).accentTextTheme.headline1;
遷移後的程式碼
final ThemeData theme = Theme.of(context);
TextStyle style = theme.textTheme.headline1.copyWith(
color: theme.colorScheme.onSecondary,
)
accentIconTheme
#此屬性僅用於設定 FloatingActionButton
內的圖示顏色。現在可以直接設定圖示顏色,或使用 FloatingActionButtonThemeData
來設定。請參閱 FloatingActionButton 和 ThemeData 的強調屬性。
時程
#已於版本中實作:2.3.0-0.1.pre
於穩定版發布:2.5
參考資料
#API 文件
相關問題
相關 PR
其他
除非另有說明,否則本網站上的文件均反映 Flutter 的最新穩定版本。頁面上次更新於 2024-04-04。 檢視原始碼 或 回報問題。