ThemeData 的 accent 属性已弃用
摘要
#ThemeData 的 accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme 属性已被弃用。
根据 Material Design 规范,Material 组件不再指定或使用“accent”颜色。组件颜色的默认值是从主题的整体 颜色方案 (color scheme) 中派生而来。ColorScheme
的 secondary color (次要颜色) 现在通常用于替代 accentColor
,而 onSecondary color (次要颜色上的颜色) 用于需要对比色时。
上下文
#这是 Material 主题系统更新 项目的一小部分。
从 Flutter 1.17 开始,ThemeData 的 accent 属性(accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme)不再被 Material 库使用。它们已被主题的 colorScheme
和 textTheme
属性的依赖项所取代,这是为了实现长期目标,即使 Material 组件的默认配置几乎完全依赖于这两个属性。
这些更改的动机是使主题系统更易于理解和使用。所有组件的默认颜色都由组件本身定义,并基于颜色方案。可以使用特定组件的主题(如 FloatingActionButtonThemeData
或 CheckBoxTheme
)覆盖特定组件类型的默认值。以前,一些组件类型仅在某些情况下使用 accentColor 等属性,这使得难以理解覆盖这些属性的影响。
更改说明
#ThemeData 的 accentColor、accentColorBrightness、accentIconTheme 和 accentTextTheme 属性已被弃用,因为 Material 库不再使用它们。
迁移指南
#应用程序主题
#ThemeData
值不再需要指定 accentColor、accentColorBrightness、accentIconTheme 或 accentTextTheme。
要以与以前大致相同的方式配置 Material 组件的外观,请指定颜色方案的 secondary color (次要颜色),而不是 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,因为该 TextStyle 的颜色保证与 accent color(现在是 ColorScheme.secondaryColor
)形成对比。要获得相同的结果,现在请将 TextStyle 的颜色指定为 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
其他
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面最后更新于 2024-04-04。 查看源代码 或 报告问题。