Saltar al contenido principal

Las propiedades accent de ThemeData han sido desaprobadas

Las propiedades accentColor, accentColorBrightness, accentIconTheme y accentTextTheme de ThemeData han sido deprecadas.

Resumen

#

Las propiedades accentColor, accentColorBrightness, accentIconTheme y accentTextTheme de ThemeData han sido deprecadas.

La especificación de Material Design spec ya no especifica ni utiliza un color "accent" (acento) para los componentes de Material. Los valores predeterminados para los colores de los componentes se derivan del color scheme (esquema de colores) del tema general. El secondary color (color secundario) del ColorScheme se utiliza ahora típicamente en lugar de accentColor y el onSecondary color se utiliza cuando se necesita un color de contraste.

Contexto

#

Esto fue una pequeña parte del proyecto Material Theme System Updates.

A partir de Flutter 1.17, las propiedades accent de ThemeData - accentColor, accentColorBrightness, accentIconTheme y accentTextTheme - ya no eran utilizadas por la biblioteca de Material. Habían sido reemplazadas por dependencias en las propiedades colorScheme y textTheme del tema como parte del objetivo a largo plazo de hacer que las configuraciones predeterminadas de los componentes de material dependan casi exclusivamente de estas dos propiedades.

La motivación de estos cambios es hacer que el sistema de temas sea más fácil de entender y usar. Los colores predeterminados para todos los componentes deben ser definidos por los propios componentes y basarse en el esquema de colores. Los valores predeterminados para tipos de componentes específicos se pueden invalidar con temas específicos de componentes como FloatingActionButtonThemeData o CheckBoxTheme. Anteriormente, propiedades como accentColor eran utilizadas por un puñado de tipos de componentes y solo en algunas situaciones, lo que dificultaba entender las implicaciones de invalidarlas.

Descripción del cambio

#

Las propiedades accentColor, accentColorBrightness, accentIconTheme y accentTextTheme de ThemeData han sido deprecadas porque la biblioteca de Material ya no las utiliza.

Guía de migración

#

Tema de la aplicación

#

Los valores de ThemeData ya no necesitan especificar accentColor, accentColorBrightness, accentIconTheme o accentTextTheme.

Para configurar la apariencia de los componentes de material aproximadamente de la misma manera que antes, especifica el color secundario del esquema de colores en lugar de accentColor.

Código antes de la migración:

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

Código después de la migración:

dart
final ThemeData theme = ThemeData();
MaterialApp(
  theme: theme.copyWith(
    colorScheme: theme.colorScheme.copyWith(secondary: myColor),
  ),
  //...
)

accentColor

#

El color de ColorScheme más cercano compatible con versiones anteriores es ColorScheme.secondary. Para apegarse lo más posible a las últimas directrices de Material Design, se puede sustituir por ColorScheme.primary en su lugar. Si se necesita un color de contraste, entonces utiliza ColorScheme.onSecondary.

Los componentes personalizados que solían buscar el accentColor del tema, pueden buscar ColorScheme.secondary en su lugar.

Código antes de la migración:

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

Código después de la migración:

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

accentColorBrightness

#

El método estático ThemeData.estimateBrightnessForColor() se puede usar para calcular el brillo de cualquier color.

accentTextTheme

#

Esto consistía en TextStyles blancos para temas oscuros, y TextStyles negros para temas claros. En la mayoría de los casos se puede usar textTheme en su lugar. Un modismo común era hacer referencia a un TextStyle de accentTextTheme, ya que se garantizaba que el color del estilo de texto contrastara bien con el color de acento (ahora ColorScheme.secondaryColor). Para obtener el mismo resultado ahora, especifica el color del estilo de texto como ColorScheme.onSecondary:

Código antes de la migración:

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

Código después de la migración:

dart
final ThemeData theme = Theme.of(context);
TextStyle style = theme.textTheme.headline1.copyWith(
  color: theme.colorScheme.onSecondary,
)

accentIconTheme

#

Esta propiedad solo se había utilizado para configurar el color de los iconos dentro de un FloatingActionButton. Ahora es posible configurar el color del icono directamente o con FloatingActionButtonThemeData. Consulta FloatingActionButton and ThemeData's accent properties.

Timeline

#

Llegó en la versión: 2.3.0-0.1.pre
En la versión estable: 2.5

Referencias

#

Documentación de la API:

Issues relevantes:

PRs relevantes:

Otros: