Por qué los constructores en Flutter suelen ser de una sola línea y sin ámbito { }
A quienes vienen de lenguajes tradicionales de Programación Orientada a Objetos les suele llamar la atención que los constructores de widgets en Flutter suelan reducirse a una sola línea terminada en punto y coma, sin un bloque de cuerpo { ... } donde ejecutar lógica imperativa.
En Flutter, esta sintaxis concisa de una sola línea es el estándar y la forma más idiomática de construir widgets.
Al igual que ocurre en lenguajes como Kotlin con los Primary Constructors (class Persona(val nombre: String)), en Dart los constructores de widgets responden a principios muy concretos:
-
Los widgets no son objetos de negocio pesados; son planos o recetas declarativas. Su única responsabilidad es recibir parámetros y ponerlos a disposición del método
build. -
Dart cuenta con la sintaxis de inicialización de parámetros formales (
this.propiedadysuper.propiedad), que asigna los valores a los campos finales de la clase automáticamente sin requerir código manual en el cuerpo del constructor:const MiBoton({super.key, required this.titulo}); // Asigna automáticamente el argumento al campo final 'titulo' -
Si fuese necesario realizar validaciones previas a la creación del objeto, en lugar de un cuerpo imperativo
{ }se utiliza la lista de inicialización mediante: assert(...):const MiBarra({super.key, required this.altura}) // Constructor con parámetro formal nombrado: assert(altura > 0, 'La altura debe ser positiva'); // Lista de inicialización: valida la condición antes de crear el objeto