跳至主要內容

ThemeData 的 accent 屬性已被棄用

摘要

#

ThemeData 的 accentColoraccentColorBrightnessaccentIconThemeaccentTextTheme 屬性已被棄用。

Material Design 規範不再指定或使用 Material 元件的「強調 (accent)」顏色。元件顏色的預設值是從整體主題的 色彩配置 (color scheme) 衍生而來。ColorSchemesecondary 顏色現在通常用來取代 accentColor,而當需要對比顏色時則使用 onSecondary 顏色

背景

#

這項變更只是 Material 主題系統更新專案的一小部分。

在 Flutter 1.17 中,Material 函式庫不再使用 ThemeData 的強調屬性 (accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme)。它們已由主題的 colorSchemetextTheme 屬性的相依性所取代,這也是使 Material 元件的預設組態幾乎完全依賴這兩個屬性的長期目標的一部分。

這些變更的目的是使主題系統更容易理解和使用。所有元件的預設顏色都由元件本身定義,並以色彩配置為基礎。特定元件類型的預設值可以使用特定於元件的主題 (例如 FloatingActionButtonThemeDataCheckBoxTheme) 來覆寫。先前,一些元件類型僅在某些情況下使用像是 accentColor 這類的屬性,這使得難以理解覆寫它們的影響。

變更說明

#

ThemeData 的 accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme 屬性已被棄用,因為 Material 函式庫不再使用它們。

遷移指南

#

應用程式主題

#

ThemeData 值不再需要指定 accentColor、accentColorBrightness、accentIconTheme 或 accentTextTheme。

若要以與先前大致相同的方式設定 Material 元件的外觀,請指定色彩配置的 secondary 顏色,而非 accentColor。

遷移前的程式碼

dart
MaterialApp(
  theme: ThemeData(accentColor: myColor),
  // ...
);

遷移後的程式碼

dart
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 來取代。

遷移前的程式碼

dart
Color myColor = Theme.of(context).accentColor;

遷移後的程式碼

dart
Color myColor = Theme.of(context).colorScheme.secondary;

accentColorBrightness

#

靜態的 ThemeData.estimateBrightnessForColor() 方法可用於計算任何顏色的亮度。

accentTextTheme

#

在深色主題中,這是白色的 TextStyle,在淺色主題中則是黑色的 TextStyle。在大多數情況下,可以使用 textTheme 來取代。一種常見的用法是參考 accentTextTheme 中的一個 TextStyle,因為該文字樣式的顏色保證能與強調色 (現在是 ColorScheme.secondaryColor) 形成良好的對比。若要獲得相同的結果,現在請將文字樣式的顏色指定為 ColorScheme.onSecondary

遷移前的程式碼

dart
TextStyle style = Theme.of(context).accentTextTheme.headline1;

遷移後的程式碼

dart
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

其他