Sobes.tech
Junior

Jak funguje klíčové slovo await v asynchronním programování na Flutteru?

sobes.tech AI

Odpověď od AI

Klíčové slovo await se používá v asynchronních funkcích (označených klíčovým slovem async) k pozastavení provádění funkce, dokud se Future nedokončí a nevrátí výsledek.

Princip fungování:

  1. Když provádění dosáhne řádku s await, aktuální funkce je pozastavena.
  2. Kontrola je vrácena volajícímu kódu (nebo event loopu), což umožňuje, aby se provedly jiné části programu. To zabraňuje zablokování UI.
  3. Když se Future, na který odkazuje await, dokončí (tedy provede svou asynchronní operaci a vrátí hodnotu nebo vyhodí výjimku), pozastavená funkce se obnoví od místa, kde byla přerušena.
  4. Pokud se Future úspěšně dokončil, hodnota vrácená Future se stává výsledkem výrazu await.
  5. Pokud Future skončil chybou (vyhodil výjimku), bude tato výjimka vyhozena na místě volání await.

Příklad:

// Asynchronní funkce označená jako `async`
Future<String> fetchData() async {
  // Simulace asynchronní operace (například síťový požadavek)
  await Future.delayed(Duration(seconds: 2));
  return 'Data ze sítě!';
}

void main() async {
  print('Začátek získávání dat...');

  // Použití `await` k čekání na dokončení Future
  try {
    String data = await fetchData();
    print('Získáno: $data');
  } catch (e) {
    print('Chyba při získávání dat: $e');
  }

  print('Program byl ukončen (i když `await` může stále běžet)');
}

V tomto příkladu je main označena jako async, aby mohla používat await. Volání await fetchData() pozastaví provádění main na 2 sekundy, aniž by blokovalo hlavní vlákno UI. Zatímco fetchData čeká, mohou ostatní části aplikace pokračovat v práci. Jakmile fetchData skončí, pokračuje provádění main a proměnné data je přiřazena vrácená hodnota.