Saltar al contenido principal

FloatingActionButton y propiedades accent de ThemeData

Eliminar el uso no documentado por parte de FloatingActionButton de la propiedad accentTextTheme de ThemeData, y su uso innecesario de accentIconTheme.

Resumen

#

Se eliminó la dependencia de FloatingActionButton (FAB) de Flutter con respecto a las propiedades accent de ThemeData.

Contexto

#

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

Anteriormente, la propiedad ThemeData accentIconTheme solo la utilizaba FloatingActionButton para determinar el color por defecto del texto o de los iconos que aparecían dentro del botón.

FloatingActionButton también utilizaba la propiedad ThemeData accentTextTheme, sin embargo esta dependencia no estaba documentada y era innecesaria.

Ambas dependencias eran confusas. Por ejemplo, si uno configuraba el Theme's accentIconTheme para cambiar la apariencia de todos los botones de acción flotantes, era difícil saber qué otros componentes se verían afectados, o podrían verse afectados en el futuro.

La especificación de Material Design ya no incluye un color "accent". En su lugar, ahora se utiliza el color secondary de ColorScheme.

Anteriormente, las aplicaciones podían configurar el color del texto y de los iconos dentro de los FloatingActionButtons con la propiedad foregroundColor del Widget, o con el foregroundColor de FloatingActionButtonTheme. Si no se especificaba ninguna propiedad foregroundColor, el color de primer plano se predeterminaba al color de accentIconTheme.

Con este cambio, el comportamiento por defecto utiliza el color onSecondary del esquema de colores en su lugar.

Descripción del cambio

#

Anteriormente, la propiedad accentIconTheme proporcionaba un valor por defecto para la propiedad FloatingActionButton's foregroundColor:

dart
    final Color foregroundColor = this.foregroundColor
      ?? floatingActionButtonTheme.foregroundColor
      ?? theme.accentIconTheme.color // To be removed.
      ?? theme.colorScheme.onSecondary;

Las aplicaciones que configuran el accentIconTheme de su tema para configurar eficazmente el foregroundColor de todos los botones de acción flotantes, pueden obtener el mismo efecto configurando el foregroundColor de su tema floatingActionButtonTheme.

La propiedad FloatingActionButton's foregroundColor ahora se utiliza para configurar el textStyle de la clase RawMaterialButton creada por FloatingActionButton. Anteriormente, este estilo de texto se basaba en el estilo de botón de ThemeData.accentTextTheme:

dart
// theme.accentTextTheme becomes theme.textTheme
final TextStyle textStyle = theme.accentTextTheme.button.copyWith(
  color: foregroundColor,
  letterSpacing: 1.2,
);

Excepto en los casos en que una aplicación haya configurado explícitamente el accentTextTheme para aprovechar esta dependencia no documentada, este uso de accentTextTheme es innecesario. Este cambio reemplaza este uso de accentTextTheme con textTheme.

Guía de migración

#

Este cambio ocurrió en dos pasos:

  1. Si el primer plano de un FloatingActionButton se establece en un color no predeterminado, ahora se imprime una advertencia.
  2. La dependencia de accentIconTheme fue eliminada. Si aún no lo has hecho, migra tus aplicaciones según el patrón a continuación.

Para configurar el foregroundColor de FloatingActionButton para todos los FABs, puedes configurar el floatingActionButtonTheme de tu tema en lugar de su accentIconTheme.

Código antes de la migración:

dart
MaterialApp(
  theme: ThemeData(
    accentIconTheme: IconThemeData(color: Colors.red),
  ),
)

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

dart
MaterialApp(
  theme: ThemeData(
    floatingActionButtonTheme: FloatingActionButtonThemeData(
      foregroundColor: Colors.red,
    ),
  ),
)

Timeline

#

Lanzado en la versión: 1.16.3
En versión estable: 1.17

Referencias

#

Doc de diseño:

Documentación de la API:

PRs relevantes:

  • Paso 1 de 2 Advertir sobre la dependencia de FloatingActionButton de Flutter con respecto a las propiedades accent de ThemeData
  • Paso 2 de 2 Eliminar la dependencia de FloatingActionButton de Flutter con respecto a las propiedades accent de ThemeData

Otros: