Sobes.tech
Junior

Cum funcționează cuvântul cheie await în programarea asincronă pe Flutter?

sobes.tech AI

Răspuns de la AI

Cuvântul cheie await este utilizat în funcțiile asincrone (marcate cu cuvântul cheie async) pentru a suspenda execuția funcției până când Future se finalizează și returnează un rezultat.

Principiul de funcționare:

  1. Când execuția ajunge la linia cu await, funcția curentă este suspendată.
  2. Controlul este returnat către codul care a apelat (sau bucla de evenimente), permițând altor părți ale programului să ruleze. Acest lucru previne blocarea interfeței utilizatorului.
  3. Când Future la care se face referire cu await se finalizează (adică, își execută operația asincronă și returnează o valoare sau aruncă o excepție), funcția suspendată se reia de unde a fost întreruptă.
  4. Dacă Future s-a finalizat cu succes, valoarea returnată devine rezultatul expresiei await.
  5. Dacă Future s-a încheiat cu o eroare (a aruncat o excepție), această excepție va fi aruncată în locul unde a fost apelat await.

Exemplu:

// Funcție asincronă marcată cu async
Future<String> fetchData() async {
  // Simulare a unei operații asincrone (de exemplu, o cerere de rețea)
  await Future.delayed(Duration(seconds: 2));
  return 'Datele din rețea au fost primite!';
}

void main() async {
  print('Începutul obținerii datelor...');

  // Utilizarea await pentru a aștepta finalizarea Future
  try {
    String data = await fetchData();
    print('Primite: $data');
  } catch (e) {
    print('Eroare la obținerea datelor: $e');
  }

  print('Programul s-a încheiat (deși await-ul poate fi încă în curs)');
}

În acest exemplu, main este marcat ca async pentru a putea folosi await. Apelul await fetchData() suspendă execuția main pentru 2 secunde, fără a bloca firul principal al interfeței utilizatorului. În timp ce fetchData așteaptă, alte părți ale aplicației pot funcționa. Odată ce fetchData se finalizează, execuția main continuă, iar variabila data primește valoarea returnată.