概述

#

ThemeData 的 accentColoraccentColorBrightnessaccentIconThemeaccentTextTheme 属性已被弃用。

Material Design 规范 不再指定或使用 Material 组件的“accent”颜色。组件颜色的默认值取自整个主题的 color scheme。现在通常使用 ColorSchemesecondary color 来代替 accentColor,当需要对比色时,则使用 onSecondary color

背景

#

这是 Material 主题系统更新 项目中的一小部分。

从 Flutter 1.17 开始,Material 库不再使用 ThemeData 的 accent 属性 - accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme。作为使 Material 组件的默认配置几乎完全依赖于这两个属性的长期目标的一部分,它们已被主题的 colorSchemetextTheme 属性所取代。

这些更改的目的是使主题系统更易于理解和使用。所有组件的默认颜色将由组件本身定义,并基于 color scheme。特定组件类型的默认值可以用组件特定的主题来覆盖,例如 FloatingActionButtonThemeDataCheckBoxTheme。以前,像 accentColor 这样的属性被少数组件类型在某些情况下使用,这使得理解覆盖它们的含义变得困难。

变更说明

#

ThemeData 的 accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme 属性已被弃用,因为 Material 库不再使用它们。

迁移指南

#

应用主题

#

ThemeData 值不再需要指定 accentColor、accentColorBrightness、accentIconTheme 或 accentTextTheme。

要以与以前大致相同的方式配置 Material 组件的外观,请指定 color scheme 的 secondary color 来代替 accentColor。

迁移前的代码

dart
MaterialApp(
  theme: ThemeData(accentColor: myColor),
  // ...
);

迁移后的代码

dart
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

迁移前的代码

dart
Color myColor = Theme.of(context).accentColor;

迁移后的代码

dart
Color myColor = Theme.of(context).colorScheme.secondary;

accentColorBrightness

#

静态方法 ThemeData.estimateBrightnessForColor() 可用于计算任何颜色的亮度。

accentTextTheme

#

这曾是深色主题下的白色 TextStyle,浅色主题下的黑色 TextStyles。在大多数情况下,可以使用 textTheme 代替。一个常见的习惯是引用 accentTextTheme 中的一个 TextStyle,因为 text style 的颜色保证能与 accent color(现在是 ColorScheme.secondaryColor)良好对比。要获得相同的结果,现在可以将 text style 的颜色指定为 ColorScheme.onSecondary

迁移前的代码

dart
TextStyle style = Theme.of(context).accentTextTheme.headline1;

迁移后的代码

dart
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

其他