Saltar al contenido principal

Actualización de la cabecera de semántica y del comportamiento de headingLevel en iOS y Android

La propiedad de semantics header ahora no tiene efecto (no-op) en iOS y Android. Los comportamientos de los encabezados de accesibilidad ahora se controlan con headingLevel.

Resumen

#

La propiedad de semantics header ahora se comporta como un no-op en iOS y Android. Para declarar un encabezado de sección con fines de accesibilidad en estas plataformas, usa la propiedad headingLevel con un valor mayor que 0.

Contexto

#

Históricamente, Flutter utilizaba la propiedad booleana de semantics header para denotar encabezados en las implementaciones de plataforma:

  • En Android, un valor de header establecido en true se asignaba a View.setHeading(true).
  • En iOS, un valor de header establecido en true se asignaba al rasgo de accesibilidad UIAccessibilityTraitHeader.

Sin embargo, setHeading y UIAccessibilityTraitHeader representan encabezados (equivalentes a encabezados/títulos de sección), los cuales se representan mejor mediante un nivel de encabezado. Por el contrario, "header" en estas plataformas a menudo representa un banner o una barra de aplicación (como SliverAppBar o AppBar), lo que creaba confusión y discrepancia entre las APIs de la plataforma y las propiedades de Flutter.

Con este cambio:

  • La propiedad de semantics header se comporta como un no-op en iOS y Android. Sigue estando disponible en la API y aún podrá usarse en el futuro si se proporcionan APIs similares.
  • La propiedad headingLevel se actualizó de modo que establecerla en un valor mayor que 0 se asigna directamente a View.setHeading(true) en Android y a UIAccessibilityTraitHeader en iOS. En iOS 13+, también se asigna a accessibilityHeadingLevel.

Guía de migración

#

Si tu código utilizaba anteriormente Semantics(header: true, ...) o SemanticsProperties(header: true, ...) para declarar encabezados, migra tu código para usar headingLevel: 1 (u otro entero mayor que 0).

Ten en cuenta que aunque establecer headingLevel en cualquier valor mayor que 0 declara un encabezado en Android e iOS, otras plataformas (como la web) tratan el número de nivel de encabezado específico de manera diferente. Por ejemplo, en la web, los valores 1 al 6 se asignan a los elementos HTML correspondientes de <h1> a <h6>.

Código antes de la migración:

dart
Semantics(
  header: true,
  child: Text('Section Title'),
)

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

dart
Semantics(
  headingLevel: 1,
  child: Text('Section Title'),
)

Del mismo modo, si utilizaste SemanticsProperties:

Código antes de la migración:

dart
SemanticsProperties(
  header: true,
)

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

dart
SemanticsProperties(
  headingLevel: 1,
)

Timeline

#

Introducido en la versión: 3.45.0-0.1.pre
En el lanzamiento estable: TBD

Referencias

#

Documentación de la API:

Issues relevantes:

PRs relevantes: