ThemeData 的 accent 屬性已被棄用
概述
#ThemeData 的 accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme 屬性已被棄用。
Material Design 規範 不再指定或使用 Material 元件的“accent”顏色。元件顏色的預設值取自整個主題的 color scheme。現在通常使用 ColorScheme 的 secondary color 來代替 accentColor,當需要對比色時,則使用 onSecondary color。
背景
#這是 Material 主題系統更新 專案中的一小部分。
從 Flutter 1.17 開始,Material 庫不再使用 ThemeData 的 accent 屬性 - accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme。作為使 Material 元件的預設配置幾乎完全依賴於這兩個屬性的長期目標的一部分,它們已被主題的 colorScheme 和 textTheme 屬性所取代。
這些更改的目的是使主題系統更易於理解和使用。所有元件的預設顏色將由元件本身定義,並基於 color scheme。特定元件型別的預設值可以用元件特定的主題來覆蓋,例如 FloatingActionButtonThemeData 或 CheckBoxTheme。以前,像 accentColor 這樣的屬性被少陣列件型別在某些情況下使用,這使得理解覆蓋它們的含義變得困難。
變更說明
#ThemeData 的 accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme 屬性已被棄用,因為 Material 庫不再使用它們。
遷移指南
#應用主題
#ThemeData 值不再需要指定 accentColor、accentColorBrightness、accentIconTheme 或 accentTextTheme。
要以與以前大致相同的方式配置 Material 元件的外觀,請指定 color scheme 的 secondary color 來代替 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,淺色主題下的黑色 TextStyles。在大多數情況下,可以使用 textTheme 代替。一個常見的習慣是引用 accentTextTheme 中的一個 TextStyle,因為 text style 的顏色保證能與 accent color(現在是 ColorScheme.secondaryColor)良好對比。要獲得相同的結果,現在可以將 text style 的顏色指定為 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 的 accent 屬性。
時間線
#包含於版本: 2.3.0-0.1.pre
穩定版本:2.5
參考資料
#API 文件
相關問題
相關 PR
其他