跳至主要內容

FloatingActionButton 和 ThemeData 的 accent 屬性

摘要

#

移除 Flutter 的 FloatingActionButton (FAB) 對 ThemeData accent 屬性的依賴。

背景

#

這是Material Theme System Updates專案的一小部分。

先前,ThemeDataaccentIconTheme 屬性僅被 FloatingActionButton 用於決定按鈕內顯示的文字或圖示的預設顏色。

FloatingActionButton 也使用了 ThemeData accentTextTheme 屬性,但此依賴關係沒有文件記錄且是不必要的。

這兩種依賴關係都令人困惑。例如,如果將 ThemeaccentIconTheme 設定為變更所有浮動操作按鈕的外觀,則很難知道哪些其他元件會受影響,或未來可能會受影響。

Material Design 規範不再包含「accent」顏色。現在改用 ColorScheme輔助顏色

先前,應用程式可以使用 widget 的 foregroundColor 屬性,或使用 FloatingActionButtonThemeforegroundColor,來設定 FloatingActionButtons 內文字和圖示的顏色。如果沒有指定 foregroundColor 屬性,則前景顏色預設為 accentIconTheme 的顏色。

經過此變更,預設行為會改用配色方案的 onSecondary 顏色。

變更說明

#

先前,accentIconThemeFloatingActionButtonforegroundColor 屬性提供預設值

dart
    final Color foregroundColor = this.foregroundColor
      ?? floatingActionButtonTheme.foregroundColor
      ?? theme.accentIconTheme.color // To be removed.
      ?? theme.colorScheme.onSecondary;

若應用程式設定主題的 accentIconTheme 來有效地設定所有浮動操作按鈕的 foregroundColor,可以透過設定主題的 floatingActionButtonThemeforegroundColor 來達到相同的效果。

現在 FloatingActionButtonforegroundColor 用於設定 FloatingActionButton 建立的 RawMaterialButtontextStyle。先前,此文字樣式是基於 ThemeData.accentTextTheme 的按鈕樣式。

dart
// theme.accentTextTheme becomes theme.textTheme
final TextStyle textStyle = theme.accentTextTheme.button.copyWith(
  color: foregroundColor,
  letterSpacing: 1.2,
);

除非應用程式明確設定了 accentTextTheme 以利用這個未記錄的依賴關係,否則這種對 accentTextTheme 的使用是不必要的。此變更將 accentTextTheme 的使用替換為 textTheme

遷移指南

#

此變更分兩個步驟進行

  1. 如果將 FloatingActionButton 的前景設定為非預設顏色,則現在會列印警告。
  2. 已移除 accentIconTheme 的依賴關係。如果您尚未執行此操作,請按照以下模式遷移您的應用程式。

若要為所有 FAB 設定 FloatingActionButtonforegroundColor,您可以設定主題的 floatingActionButtonTheme,而不是其 accentIconTheme

遷移前的程式碼

dart
MaterialApp(
  theme: ThemeData(
    accentIconTheme: IconThemeData(color: Colors.red),
  ),
)

遷移後的程式碼

dart
MaterialApp(
  theme: ThemeData(
    floatingActionButtonTheme: FloatingActionButtonThemeData(
      foregroundColor: Colors.red,
    ),
  ),
)

時間軸

#

已在版本中發佈:1.16.3
在穩定版本中發佈:1.17

參考資料

#

設計文件

API 文件

相關的 PR

  • 第 1/2 步 警告 Flutter 的 FloatingActionButton 對 ThemeData accent 屬性的依賴關係
  • 第 2/2 步 移除 Flutter 的 FloatingActionButton 對 ThemeData accent 屬性的依賴關係

其他