概述

#

ThemeData 的 accentColoraccentColorBrightnessaccentIconThemeaccentTextTheme 屬性已被棄用。

Material Design 規範 不再指定或使用 Material 元件的“accent”顏色。元件顏色的預設值取自整個主題的 color scheme。現在通常使用 ColorSchemesecondary color 來代替 accentColor,當需要對比色時,則使用 onSecondary color

背景

#

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

從 Flutter 1.17 開始,Material 庫不再使用 ThemeData 的 accent 屬性 - accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme。作為使 Material 元件的預設配置幾乎完全依賴於這兩個屬性的長期目標的一部分,它們已被主題的 colorSchemetextTheme 屬性所取代。

這些更改的目的是使主題系統更易於理解和使用。所有元件的預設顏色將由元件本身定義,並基於 color scheme。特定元件型別的預設值可以用元件特定的主題來覆蓋,例如 FloatingActionButtonThemeDataCheckBoxTheme。以前,像 accentColor 這樣的屬性被少陣列件型別在某些情況下使用,這使得理解覆蓋它們的含義變得困難。

變更說明

#

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

遷移指南

#

應用主題

#

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

要以與以前大致相同的方式配置 Material 元件的外觀,請指定 color scheme 的 secondary color 來代替 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,淺色主題下的黑色 TextStyles。在大多數情況下,可以使用 textTheme 代替。一個常見的習慣是引用 accentTextTheme 中的一個 TextStyle,因為 text style 的顏色保證能與 accent color(現在是 ColorScheme.secondaryColor)良好對比。要獲得相同的結果,現在可以將 text style 的顏色指定為 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 的 accent 屬性

時間線

#

包含於版本: 2.3.0-0.1.pre
穩定版本:2.5

參考資料

#

API 文件

相關問題

相關 PR

其他