概述

#

SwitchSwitchListTileCheckboxCheckboxListTileRadioRadioListTile 等 Material 元件現在使用 ColorScheme.secondary 顏色作為其可切換元件的顏色。ThemeData.toggleableActiveColor 已棄用,並將最終被移除。

背景

#

將依賴於 ThemeData.toggleableActiveColor 的元件遷移到 ColorScheme.secondary 導致 toggleableActiveColor 屬性變得不必要。根據 Flutter 的棄用策略,該屬性最終將被移除。

變更說明

#

之前使用 ThemeData.toggleableActiveColor 顏色來表示活動/選中狀態的元件,現在使用 ColorScheme.secondary

遷移指南

#

可切換元件的活動/選中顏色通常可以透過 3 種方式進行自定義

  1. 使用 ThemeData 的 ColorScheme.secondary
  2. 使用元件主題 SwitchThemeDataListTileThemeDataCheckboxThemeDataRadioThemeData
  3. 透過自定義 widget 的顏色屬性。

遷移前的程式碼

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

遷移後的程式碼

dart
final ThemeData theme = ThemeData();
MaterialApp(
  theme: theme.copyWith(
    switchTheme: SwitchThemeData(
      thumbColor: MaterialStateProperty.resolveWith<Color?>(
          (Set<MaterialState> states) {
        if (states.contains(MaterialState.disabled)) {
          return null;
        }
        if (states.contains(MaterialState.selected)) {
          return myColor;
        }
        return null;
      }),
      trackColor: MaterialStateProperty.resolveWith<Color?>(
          (Set<MaterialState> states) {
        if (states.contains(MaterialState.disabled)) {
          return null;
        }
        if (states.contains(MaterialState.selected)) {
          return myColor;
        }
        return null;
      }),
    ),
    radioTheme: RadioThemeData(
      fillColor: MaterialStateProperty.resolveWith<Color?>(
          (Set<MaterialState> states) {
        if (states.contains(MaterialState.disabled)) {
          return null;
        }
        if (states.contains(MaterialState.selected)) {
          return myColor;
        }
        return null;
      }),
    ),
    checkboxTheme: CheckboxThemeData(
      fillColor: MaterialStateProperty.resolveWith<Color?>(
          (Set<MaterialState> states) {
        if (states.contains(MaterialState.disabled)) {
          return null;
        }
        if (states.contains(MaterialState.selected)) {
          return myColor;
        }
        return null;
      }),
    ),
  ),
  //...
)

時間線

#

穩定版釋出於: 3.7

參考資料

#

API 文件

相關問題

相關 PR