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
headerestablecido entruese asignaba aView.setHeading(true). - En iOS, un valor de
headerestablecido entruese asignaba al rasgo de accesibilidadUIAccessibilityTraitHeader.
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
headerse 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
headingLevelse actualizó de modo que establecerla en un valor mayor que0se asigna directamente aView.setHeading(true)en Android y aUIAccessibilityTraitHeaderen iOS. En iOS 13+, también se asigna aaccessibilityHeadingLevel.
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:
Semantics(
header: true,
child: Text('Section Title'),
)
Código después de la migración:
Semantics(
headingLevel: 1,
child: Text('Section Title'),
)
Del mismo modo, si utilizaste SemanticsProperties:
Código antes de la migración:
SemanticsProperties(
header: true,
)
Código después de la migración:
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:
A menos que se indique lo contrario, la documentación en este sitio refleja Flutter 3.44.0. Página actualizada por última vez el 03-06-2026. Ver código fuente oreportar un problema.