Saltar al contenido principal

La nueva API de autovalidación de Form y FormField

Brinda más control sobre cómo autovalidar un Form y un FormField.

Resumen

#

La API de autovalidación anterior para los widgets Form y FormField no controlaba cuándo debía ocurrir la autovalidación. Por lo tanto, la autovalidación de estos widgets siempre ocurría en la primera compilación (first build) cuando el widget se mostraba por primera vez al usuario, y no podías controlar cuándo debía ocurrir la autovalidación.

Contexto

#

Debido a que la API original no permitía a los desarrolladores cambiar el comportamiento de autovalidación para validar solo cuando el usuario interactúa con el campo de formulario, añadimos una nueva API que permite a los desarrolladores configurar cómo quieren que se comporte la autovalidación para los widgets Form y FormField.

Descripción del cambio

#

Se realizaron los siguientes cambios:

  • El parámetro autovalidate está obsoleto (deprecated).
  • Se añade un nuevo parámetro llamado autovalidateMode, un Enum que acepta valores de la clase Enum AutovalidateMode.

Guía de migración

#

Para migrar a la nueva API de autovalidación, debes reemplazar el uso del parámetro obsoleto autovalidate por el nuevo parámetro autovalidateMode. Si deseas el mismo comportamiento que antes, puedes usar: autovalidateMode = AutovalidateMode.always. Esto hace que tus widgets Form y FormField se autovaliden en la primera compilación y cada vez que cambien.

Código antes de la migración:

dart
class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FormField(
      autovalidate: true,
      builder: (FormFieldState state) {
        return Container();
      },
    );
  }
}

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

dart
class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FormField(
      autovalidateMode: AutovalidateMode.always,
      builder: (FormFieldState state) {
        return Container();
      },
    );
  }
}

Timeline

#

Introducido en la versión: 1.21.0-5.0.pre
En el lanzamiento estable: 1.22

Referencias

#

Documentación de la API:

Issues relevantes:

PRs relevantes: