ThemeData 的 toggleableActiveColor 屬性已棄用
概述
#Switch、SwitchListTile、Checkbox、CheckboxListTile、Radio、RadioListTile 等 Material 元件現在使用 ColorScheme.secondary 顏色作為其可切換元件的顏色。ThemeData.toggleableActiveColor 已棄用,並將最終被移除。
背景
#將依賴於 ThemeData.toggleableActiveColor 的元件遷移到 ColorScheme.secondary 導致 toggleableActiveColor 屬性變得不必要。根據 Flutter 的棄用策略,該屬性最終將被移除。
變更說明
#之前使用 ThemeData.toggleableActiveColor 顏色來表示活動/選中狀態的元件,現在使用 ColorScheme.secondary。
遷移指南
#可切換元件的活動/選中顏色通常可以透過 3 種方式進行自定義
- 使用 ThemeData 的
ColorScheme.secondary。 - 使用元件主題
SwitchThemeData、ListTileThemeData、CheckboxThemeData和RadioThemeData。 - 透過自定義 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