Sobes.tech
Junior

Kako funkcioniše ključna reč await u asinhronom programiranju na Flutteru?

sobes.tech АИ

Одговор од АИ

Ključna reč await se koristi u asinhronim funkcijama (označenim ključnom rečju async) za zaustavljanje izvršenja funkcije dok se Future ne završi i ne vrati rezultat.

Princip rada:

  1. Kada izvršenje dođe do reda sa await, trenutna funkcija se pauzira.
  2. Kontrola se vraća pozivajućem kodu (ili event loop-u), omogućavajući drugim delovima programa da se izvršavaju. Ovo sprečava blokiranje UI-ja.
  3. Kada se Future, na koji se odnosi await, završi (tj. izvrši svoju asinhronu operaciju i vrati vrednost ili baci izuzetak), pauzirana funkcija se nastavlja od mesta gde je prekinuta.
  4. Ako je Future uspešno završen, vrednost koju Future vraća postaje rezultat izraza await.
  5. Ako je Future završio sa greškom (bacio izuzetak), taj izuzetak će biti bačen na mestu gde je pozvan await.

Primer:

// Asinhrona funkcija označena sa `async`
Future<String> fetchData() async {
  // Simulacija asinhrone operacije (npr. mrežni zahtev)
  await Future.delayed(Duration(seconds: 2));
  return 'Podaci sa mreže!';
}

void main() async {
  print('Početak dobijanja podataka...');

  // Korišćenje `await` za čekanje završetka Future
  try {
    String data = await fetchData();
    print('Primljeno: $data');
  } catch (e) {
    print('Greška pri dobijanju podataka: $e');
  }

  print('Program je završio (iako `await` još može biti u toku)');
}

U ovom primeru, main je označena kao async da bi mogla koristiti await. Poziv await fetchData() zaustavlja izvršenje main na 2 sekunde, ne blokirajući glavni UI nit. Dok fetchData čeka, ostali delovi aplikacije mogu nastaviti sa radom. Kada fetchData završi, izvršenje main se nastavlja, i promenljiva data dobija vraćenu vrednost.