Sobes.tech
Junior

Come funziona la parola chiave await nella programmazione asincrona su Flutter?

sobes.tech AI

Risposta dell'AI

La parola chiave await viene utilizzata nelle funzioni asincrone (marcate con la parola chiave async) per sospendere l'esecuzione della funzione fino a quando il Future non si completa e restituisce un risultato.

Principio di funzionamento:

  1. Quando l'esecuzione raggiunge la riga con await, la funzione corrente viene sospesa.
  2. Il controllo viene restituito al codice chiamante (o al ciclo di eventi), consentendo ad altre parti del programma di essere eseguite. Questo impedisce di bloccare l'interfaccia utente.
  3. Quando il Future a cui si riferisce await si completa (cioè, esegue la sua operazione asincrona e restituisce un valore o lancia un'eccezione), la funzione sospesa riprende da dove era stata interrotta.
  4. Se il Future si è completato con successo, il valore restituito dal Future diventa il risultato dell'espressione await.
  5. Se il Future si è concluso con un errore (ha lanciato un'eccezione), questa eccezione verrà lanciata nel punto in cui è stato chiamato await.

Esempio:

// Funzione asincrona marcata con async
Future<String> fetchData() async {
  // Simulazione di un'operazione asincrona (ad esempio, richiesta di rete)
  await Future.delayed(Duration(seconds: 2));
  return 'Dati ricevuti dalla rete!';
}

void main() async {
  print('Inizio del recupero dati...');

  // Uso di await per attendere il completamento del Future
  try {
    String data = await fetchData();
    print('Ricevuto: $data');
  } catch (e) {
    print('Errore nel recupero dati: $e');
  }

  print('Programma terminato (anche se await potrebbe ancora essere in esecuzione)');
}

In questo esempio, main è marcata come async per poter usare await. La chiamata await fetchData() sospende l'esecuzione di main di 2 secondi, senza bloccare il thread principale dell'interfaccia utente. Mentre fetchData aspetta, altre parti dell'applicazione possono continuare a funzionare. Quando fetchData termina, l'esecuzione di main riprende, e la variabile data riceve il valore restituito.