迁移 AccentColor:如何更改 RadioListTile 和 SwitchListTile 颜色?
Migrating AccentColor: How to change RadioListTile and SwitchListTile colors?
新版本的 Flutter(从 2.5 开始)弃用了 ThemeData 中的 accentColor 属性,现在必须从 colorScheme 将其作为辅助颜色处理 colorScheme: ColorScheme.fromSwatch().copyWith (secondary: newColorForAccent))
,
如我所见,这还不够,因为在 Flutter 中还使用了 accentColor 来定义 CheckBoxTile 和 SwitchListTile 等其他小部件的颜色。
我在main中的ThemeData如下:
theme: ThemeData(
primaryColor: Color (0xFF4BD1FF),
colorScheme: ColorScheme.fromSwatch().copyWith(secondary: Color (0xFFD8A21B)),
//textTheme and others
),
如何重新定义这些小部件的颜色,以便它可以在整个应用程序中使用?
我通过反复试验找到了解决方案。我把它留在这里以防它对某人有用。基本上需要的是为 ThemeData 中的每个组件定义主题。这是一个例子:
checkboxTheme: CheckboxThemeData(
checkColor: MaterialStateProperty.all(Colors.white),
fillColor: MaterialStateProperty.all(Color (0xFFD8A21B))
),
switchTheme: SwitchThemeData(
thumbColor: MaterialStateProperty.all(Color (0xFFD8A21B)),
trackColor: MaterialStateProperty.all(Color (0x66D8A21B)),
),
radioTheme: RadioThemeData(
fillColor: MaterialStateProperty.all(Color (0xFFD8A21B))
),
因为这是主要的一部分,所以不要忘记在实施后总是完全重启。在这种情况下,Flutter Hot reload 不会显示任何更改。
新版本的 Flutter(从 2.5 开始)弃用了 ThemeData 中的 accentColor 属性,现在必须从 colorScheme 将其作为辅助颜色处理 colorScheme: ColorScheme.fromSwatch().copyWith (secondary: newColorForAccent))
,
如我所见,这还不够,因为在 Flutter 中还使用了 accentColor 来定义 CheckBoxTile 和 SwitchListTile 等其他小部件的颜色。
我在main中的ThemeData如下:
theme: ThemeData(
primaryColor: Color (0xFF4BD1FF),
colorScheme: ColorScheme.fromSwatch().copyWith(secondary: Color (0xFFD8A21B)),
//textTheme and others
),
如何重新定义这些小部件的颜色,以便它可以在整个应用程序中使用?
我通过反复试验找到了解决方案。我把它留在这里以防它对某人有用。基本上需要的是为 ThemeData 中的每个组件定义主题。这是一个例子:
checkboxTheme: CheckboxThemeData(
checkColor: MaterialStateProperty.all(Colors.white),
fillColor: MaterialStateProperty.all(Color (0xFFD8A21B))
),
switchTheme: SwitchThemeData(
thumbColor: MaterialStateProperty.all(Color (0xFFD8A21B)),
trackColor: MaterialStateProperty.all(Color (0x66D8A21B)),
),
radioTheme: RadioThemeData(
fillColor: MaterialStateProperty.all(Color (0xFFD8A21B))
),
因为这是主要的一部分,所以不要忘记在实施后总是完全重启。在这种情况下,Flutter Hot reload 不会显示任何更改。