Saltar al contenido principal

Guía de migración para CupertinoDynamicColor de amplia gama (wide gamut)

Abordar las deprecaciones previamente omitidas en CupertinoDynamicColor para alinearse con la API de Color de amplia gama.

Resumen

#

Ciertas propiedades y métodos en CupertinoDynamicColor fueron deprecados para alinearse con la clase Color debido al soporte para espacios de color de amplia gama (wide gamut) añadido en Flutter 3.27.

Contexto

#

La clase Color se actualizó para admitir espacios de color de amplia gama, pero algunas de las deprecaciones correspondientes no se aplicaron inicialmente a CupertinoDynamicColor debido a su implementación en lugar de a la extensión de Color.

Descripción del cambio

#
  1. El campo CupertinoDynamicColor.red está deprecado en favor de CupertinoDynamicColor.r.
  2. El campo CupertinoDynamicColor.green está deprecado en favor de CupertinoDynamicColor.g.
  3. El campo CupertinoDynamicColor.blue está deprecado en favor de CupertinoDynamicColor.b.
  4. El campo CupertinoDynamicColor.opacity está deprecado en favor de CupertinoDynamicColor.a.
  5. El método CupertinoDynamicColor.withOpacity() está deprecado en favor de CupertinoDynamicColor.withValues().

Guía de migración

#

Acceder a los componentes de color

#

Si tu aplicación accede a un componente de color individual, considera aprovechar los componentes de punto flotante. A corto plazo, puedes escalar los componentes mismos.

dart
int _floatToInt8(double x) {
  return (x * 255.0).round().clamp(0, 255);
}

const CupertinoDynamicColor color = CupertinoColors.systemBlue;
final intRed = _floatToInt8(color.r);
final intGreen = _floatToInt8(color.g);
final intBlue = _floatToInt8(color.b);

Opacity

#

Antes de Flutter 3.27, Color tenía el concepto de "opacidad", que aparecía en los métodos opacity y withOpacity(). Desde Flutter 3.27, el canal alfa se almacena como un valor de punto flotante. El uso de .a y .withValues() proporcionará la expresión completa de un valor de punto flotante y no se cuantizará (restringirá a un rango limitado). Esto significa que "alfa" expresa la intención de "opacidad" de forma más correcta.

Migrar opacity

#
dart
// Before: Access the alpha channel as a (converted) floating-point value.
final x = color.opacity;

// After: Access the alpha channel directly.
final x = color.a;

Migrar withOpacity

#
dart
// Before: Create a new color with the specified opacity.
final x = color.withOpacity(0.5);

// After: Create a new color with the specified alpha channel value,
// accounting for the current or specified color space.
final x = color.withValues(alpha: 0.5);

Timeline

#

Introducido en la versión: 3.36.0-0.1.pre
Versión estable: 3.38

Referencias

#

Guías relevantes:

Issues relevantes:

PRs relevantes: