Saltar al contenido principal

El widget Form ya no admite ser un sliver.

El widget Form ahora incluye un widget de semántica (semantics), lo que evita que se use directamente como un sliver.

Resumen

#

Anteriormente, el widget Form actuaba esencialmente como un contenedor directo alrededor de su hijo. Este diseño permitía que un Form que contenía un hijo sliver (por ejemplo, Form(child: otro sliver)) fuera tratado como un sliver en sí mismo dentro de un CustomScrollView o un padre desplazable (scrollable) similar.

Sin embargo, este PR introdujo un nuevo widget de semántica (semantics) dentro de la estructura interna del widget Form. Este cambio altera su comportamiento de renderizado, lo que significa que Form ya no puede funcionar directamente como un sliver.

Contexto

#

Este cambio es parte de un esfuerzo continuo para mejorar la accesibilidad y la comprensión semántica de los widgets de Flutter. Al integrar un widget de semántica directamente dentro de Form, el framework puede proporcionar mejor información a los servicios de accesibilidad.

Descripción del cambio

#

El cambio principal es la integración de un widget de semántica en el método build del widget Form.

Guía de migración

#

Si tu aplicación no utiliza actualmente el widget Form directamente como un sliver dentro de una lista desplazable (por ejemplo, como un hijo directo de la propiedad slivers de CustomScrollView), entonces no se requieren cambios.

Si tu aplicación utiliza Form como un sliver, necesitarás envolver el widget Form dentro de un SliverToBoxAdapter. SliverToBoxAdapter es un sliver que contiene un único widget de caja (box widget), convirtiendo un widget regular en un sliver que se puede colocar en un CustomScrollView.

Código antes de la migración:

dart
sliver: Form(
    key: controller.formKey,
    child: SomeWidgetWithFormFields(),
)

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

dart
sliver: SliverToBoxAdapter(
    child: Form(
        key: controller.formKey,
        child: SomeWidgetWithFormFields(),
    )
)

Timeline

#

Introducido en la versión: 3.35.0-pre
En el lanzamiento estable: 3.35

Referencias

#

Documentación de la API:

Issues relevantes:

PRs relevantes: