ThemeData 的 accent 属性已弃用
概述
#ThemeData 的 accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme 属性已弃用。
Material Design 规范不再为 Material 组件指定或使用“accent”颜色。组件颜色的默认值从整体主题的配色方案 (color scheme)中派生。现在,通常使用 ColorScheme
的secondary 颜色来代替 accentColor
,当需要对比色时,则使用onSecondary 颜色。
背景
#这是Material 主题系统更新项目的一小部分。
自 Flutter 1.17 起,Material 库不再使用 ThemeData 的 accent 属性——accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme。它们已被主题的colorScheme
和 textTheme
属性的依赖项所取代,这是使 Material 组件的默认配置几乎完全依赖于这两个属性的长期目标的一部分。
这些更改的动机是使主题系统更易于理解和使用。所有组件的默认颜色由组件本身定义并基于配色方案。特定组件类型的默认值可以通过组件特有主题(例如FloatingActionButtonThemeData
或 CheckBoxTheme
)进行覆盖。以前,像 accentColor 这样的属性仅被少数组件类型在某些情况下使用,这使得理解覆盖它们的影响变得困难。
变更说明
#ThemeData 的 accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme 属性已弃用,因为 Material 库不再使用它们。
迁移指南
#应用主题
#ThemeData
值不再需要指定 accentColor、accentColorBrightness、accentIconTheme 或 accentTextTheme。
要以与以前大致相同的方式配置 Material 组件的外观,请指定配色方案的 secondary 颜色,而不是 accentColor。
迁移前的代码
MaterialApp(
theme: ThemeData(accentColor: myColor),
// ...
);
迁移后的代码
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
。
迁移前的代码
Color myColor = Theme.of(context).accentColor;
迁移后的代码
Color myColor = Theme.of(context).colorScheme.secondary;
accentColorBrightness
#静态方法 ThemeData.estimateBrightnessForColor()
可用于计算任何颜色的亮度。
accentTextTheme
#以前,深色主题使用白色TextStyle
,浅色主题使用黑色 TextStyle。在大多数情况下,可以使用 textTheme 代替。一种常见用法是从 accentTextTheme 引用一个 TextStyle,因为文本样式(text style)的颜色保证与强调色(现在是 ColorScheme.secondaryColor
)形成良好对比。要现在获得相同的结果,请将文本样式的颜色指定为 ColorScheme.onSecondary
。
迁移前的代码
TextStyle style = Theme.of(context).accentTextTheme.headline1;
迁移后的代码
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
其他