---
title: 🔎 Para saber máis
description: "## 🧠 Callback, función anónima e closure Son conceptos relacionados, pero describen cousas distintas: - **Callback:** o papel da función; entregámola para que outro código a chame. - **Función anónima:** unha función sen nome, como `() => onSumar(cantidade)`. - **Closure:**…"
url: "https://www.drodicio.com/docs/flutter/tema-3-estado-callbacks/para-saber-mais-estado-flutter/"
updated: "2026-10-12"
category: Tema 3. Estado e callbacks
---

# 🔎 Para saber máis

## 🧠 Callback, función anónima e closure

Son conceptos relacionados, pero describen cousas distintas:

- **Callback:** o papel da función; entregámola para que outro código a chame.
- **Función anónima:** unha función sen nome, como `() => onSumar(cantidade)`.
- **Closure:** unha función que conserva acceso ás variables do lugar onde se creou.

Este fragmento úsase dentro dun `build` e crea unha lista de botóns:

```dart
final alumnos = ['Xurxo', 'Iria', 'Roi'];
final botons = alumnos.map((nome) {
  return ElevatedButton(
    // Cada función conserva acceso ao nome desta chamada a map.
    onPressed: () => debugPrint('Seleccionado: $nome'),
    child: Text(nome),
  );
}).toList();
// Podemos usar botons como children dunha Column.
```

A función de `onPressed` é anónima, úsase como callback e é unha closure que conserva acceso a `nome`. Non garda unha copia de toda a pantalla nin converte automaticamente os datos en estado.

> 📚 Consulta:
>
>
>
> - [Closures en Dart → `https://dart.dev/language/functions#lexical-closures`](https://dart.dev/language/functions#lexical-closures).

## 🔁 Cambios na configuración: `didUpdateWidget`

O pai pode construír un widget novo e Flutter conservar o seu `State`. Nese caso, `widget` pasa a apuntar á nova configuración e chámase a `didUpdateWidget` antes de `build`.

Se só les `widget.nome`, xa accedes ao nome actualizado. Se gardaches unha copia en `initState`, esa copia non se actualiza soa. `didUpdateWidget` permite reaccionar ao cambio cando o deseño o precisa; nun editor, pensa antes se queres substituír o que o usuario está escribindo.

> 📚 Consulta:
>
>
>
> - [didUpdateWidget → `https://api.flutter.dev/flutter/widgets/State/didUpdateWidget.html`](https://api.flutter.dev/flutter/widgets/State/didUpdateWidget.html).

## ⏳ Esperas e `mounted`

Unha operación con `await` pode rematar despois de pechar a pantalla. `mounted` indica se ese `State` segue na árbore; non podemos chamar a `setState` despois de `dispose`.

Fragmento dun método dun `State`: supoñemos que `cargarNome` devolve un `Future<String>` e que `_nome` é un atributo do estado.

```dart
Future<void> actualizarNome() async {
  final nome = await cargarNome(); // A espera faise fóra de setState.
  if (!mounted) return; // A pantalla puido pecharse durante a espera.
  setState(() {
    _nome = nome; // A función de setState segue sendo síncrona.
  });
}
```

Se iniciamos unha tarefa que se pode cancelar, como un temporizador ou unha subscrición, debemos cancelala en `dispose` cando deixe de ser necesaria. Comprobar `mounted` non cancela esa tarefa.

> 📚 Consulta:
>
>
>
> - [mounted → `https://api.flutter.dev/flutter/widgets/State/mounted.html`](https://api.flutter.dev/flutter/widgets/State/mounted.html).
> - [setState → `https://api.flutter.dev/flutter/widgets/State/setState.html`](https://api.flutter.dev/flutter/widgets/State/setState.html).

## 🔑 Claves: `Key`

As claves axudan a Flutter a identificar widgets entre reconstrucións. Por exemplo, unha `ValueKey` co identificador dun alumno permite conservar a asociación co seu estado cando reordenamos unha lista de widgets con estado. Non necesitamos engadir claves a todos os widgets.

> 📚 Consulta:
>
>
>
> - [Key → `https://api.flutter.dev/flutter/foundation/Key-class.html`](https://api.flutter.dev/flutter/foundation/Key-class.html).

## 🔔 `ValueChanged<T>`

É unha forma abreviada de escribir un callback que recibe un valor e non devolve nada. Por exemplo, `ValueChanged<String>` equivale a `void Function(String)`.

> 📚 Consulta:
>
>
>
> - [ValueChanged → `https://api.flutter.dev/flutter/foundation/ValueChanged.html`](https://api.flutter.dev/flutter/foundation/ValueChanged.html).
