ThemeData 的 accent 属性已经被弃用
概述
主题信息 ThemeData 中的 accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme 属性现已被弃用。
Material 设计规范 不再为 Material 组件指定或使用「强调」色。组件的默认颜色来自整个主题的 颜色方案。现在通常使用 ColorScheme
的 secondary color 代替 accentColor
,并且在需要对比色时使用 onSecondary 属性。
上下文
这是 Material 主题系统升级 项目的一部分。
从 Flutter 1.17 开始,Material 库不再使用 ThemeData 的强调属性 -
accentColor
、accentColorBrightness
、accentIconTheme
和 accentTextTheme
。它们已被主题的 colorScheme
和 textTheme
属性的依赖关系所取代。这是 material 组件的默认配置完全依赖这两个属性的长期目标中的一部分,
改动的出发点是使主题系统更易于理解和使用。所有组件的默认颜色由组件本身根据颜色方案定义。特定组件类型的默认配置可以使用特定组件的主题来覆盖,例如 FloatingActionButtonThemeData
或 CheckBoxTheme
。以前,像 accentColor
这样的属性仅在某些情况下被少数组件类型使用,这使得很难理解覆盖它们的含义。
更改描述
主题信息 ThemeData 中的 accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme 属性现已被弃用,因为 Material 不再使用它们。
迁移指南
应用程序主题
ThemeData
不再需要指定 accentColor、accentColorBrightness、
accentIconTheme 或 accentTextTheme 属性。
要以与以前大致相同的方式配置 material 组件的样式,请指定配色方案的次要颜色,而不是 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 设计指南,可以用 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
,黑色主题中代表浅色的 TextStyles。大多数情况下,可以使用 textTheme
。一个常见的用法是引用 accentTextTheme
中的 TextStyle
,因为文本样式的颜色要与强调颜色(现在是 ColorScheme.secondaryColor
)形成鲜明的对比。现在要获得相同的结果,请将文本样式的颜色指定为 ColorScheme.secondaryColor
:
迁移前的代码:
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 的强调属性。
时间轴
发布于版本:2.3.0-0.1.pre
发布于稳定版本:2.5
参考文献
API 文档:
相关 issues:
相关 PR:
其他: