diegoRodicio

View Categories

⏳ Programación asíncrona

Tempo de lectura estimado: 2 minutos

⏳ Un resultado que chega máis adiante: Future

Ler datos dunha rede ou dun ficheiro pode levar tempo. Un Future<T> representa o resultado dunha operación que rematará máis adiante: pode completarse cun valor ou cun erro.

Future<String> dará un texto; Future<void> indica que interesa saber cando remata, sen obter un valor.

⏸️ Esperar con async e await

Marcamos unha función con async para usar await dentro dela. await espera polo resultado dun Future e despois continúa esa función.

🔗 Ver o código en DartPad — https://dartpad.dev/?id=e69c05f61a29c1c589dfbc75e453575b

Duration representa unha duración. Aquí usamos Future.delayed() para simular a espera, sen necesitar conexión á rede.

🧩 Separar a operación nunha función

🔗 Ver o código en DartPad — https://dartpad.dev/?id=0fb00d8e209c14bb0bf4d6c51069d067

A espera pausa esa función e permite atender outras tarefas pendentes. async non crea por si só unha execución en paralelo: un cálculo pesado segue podendo bloquear a aplicación. En Flutter isto importa para que a interface responda.

🛟 Tratar erros dunha operación asíncrona

Con await podemos usar o mesmo try/catch que xa coñecemos.

🔗 Ver o código en DartPad — https://dartpad.dev/?id=26268dac09daaa4d71c0b1f9506b46f3

📡 Varios datos co tempo: Stream

Un Future complétase unha vez. Un Stream pode emitir varios datos, por exemplo cando cambian os resultados dunha consulta. Podemos percorrelo con await for dentro dunha función async.

🔗 Ver o código en DartPad — https://dartpad.dev/?id=6b4b8242761c52e44f173f9354a9e112

Este exemplo emite unha secuencia xa preparada. Nunha aplicación real os datos poden chegar separados no tempo. Tamén se poden recibir con listen(), que veremos cando faga falta en Flutter.

📚 Consulta: programación asíncrona – https://dart.dev/libraries/async/async-await e streams – https://dart.dev/libraries/async/using-streams.