Ir al contenido

Guía de Flutter para novatos - Miguel Páramos

FAQ sobre Flutter pal que no tiene ni idea de Flutter | 2º DAM · PMDM

Qué hace realmente super.key : identidad del widget, usos en StatelessWidget y por qué se usa super en vez de this

El parámetro super.key está presente en la práctica totalidad de constructores de widgets en Flutter. Conocer qué hace exactamente, si almacena estado, por qué es útil incluso en widgets sin estado (StatelessWidget) y por qué se utiliza la palabra reservada super en lugar de this ayuda a comprender la arquitectura interna del framework.

¿Sirve super.key para llevar registro de estado?

Sección titulada «¿Sirve super.key para llevar registro de estado?»

No almacena datos de estado. Es simplemente un identificador único o DNI (análogo a un id o la clave de elemento en un RecyclerView.Adapter de Android nativo).

Le sirve al motor de Flutter para reconciliar y saber con certeza qué elemento de la pantalla es cuál cuando el árbol de widgets se reconstruye.

  1. Reordenar o animar listas: Si tienes una lista de elementos en pantalla y eliminas o reordenas el primero, la key le indica a Flutter qué elemento exacto se modificó para animar o actualizar únicamente ese nodo.
  2. Testing e inspección: En pruebas de integración y de interfaz puedes buscar un widget de forma inequívoca mediante find.byKey(const Key('boton_login')).

La propiedad key no le pertenece a tu subclase, sino a su clase padre (StatelessWidget / Widget).

Antes de Dart 2.17 era necesario escribir la delegación completa de forma explícita:

const MiWidget({Key? key}) : super(key: key); // Sintaxis clásica previa a Dart 2.17: reenvía la clave manualmente al constructor padre

A partir de Dart 2.17 se introdujeron los super parameters, permitiendo escribir simplemente super.key, que significa: “toma este parámetro y pásaselo directamente al constructor de la clase padre (super) sin necesidad de declarar un campo local redundante”.