ThemeData 的 accent 属性已经被弃用

概述

主题信息 ThemeData 中的 accentColoraccentColorBrightnessaccentIconThemeaccentTextTheme 属性现已被弃用。

Material 设计规范 不再为 Material 组件指定或使用「强调」色。组件的默认颜色来自整个主题的 颜色方案。现在通常使用 ColorSchemesecondary color 代替 accentColor,并且在需要对比色时使用 onSecondary 属性

上下文

这是 Material 主题系统升级 项目的一部分。

从 Flutter 1.17 开始,Material 库不再使用 ThemeData 的强调属性 - accentColoraccentColorBrightnessaccentIconThemeaccentTextTheme。它们已被主题的 colorSchemetextTheme 属性的依赖关系所取代。这是 material 组件的默认配置完全依赖这两个属性的长期目标中的一部分,

改动的出发点是使主题系统更易于理解和使用。所有组件的默认颜色由组件本身根据颜色方案定义。特定组件类型的默认配置可以使用特定组件的主题来覆盖,例如 FloatingActionButtonThemeDataCheckBoxTheme。以前,像 accentColor 这样的属性仅在某些情况下被少数组件类型使用,这使得很难理解覆盖它们的含义。

更改描述

主题信息 ThemeData 中的 accentColoraccentColorBrightnessaccentIconThemeaccentTextTheme 属性现已被弃用,因为 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:

其他: