Sobes.tech
Junior

Jak działa słowo kluczowe await w programowaniu asynchronicznym na Flutterze?

sobes.tech AI

Odpowiedź od AI

Słowo kluczowe await jest używane w funkcjach asynchronicznych (oznaczonych słowem kluczowym async), aby wstrzymać wykonanie funkcji do czasu, aż Future się zakończy i zwróci wynik.

Zasada działania:

  1. Gdy wykonanie dociera do linii z await, bieżąca funkcja jest wstrzymywana.
  2. Kontrola wraca do kodu wywołującego (lub pętli zdarzeń), umożliwiając wykonywanie innych części programu. Zapobiega to blokowaniu interfejsu użytkownika.
  3. Gdy Future, na który odnosi się await, zostanie zakończony (czyli wykona swoją operację asynchroniczną i zwróci wartość lub rzuci wyjątek), zawieszona funkcja jest wznawiana od miejsca, w którym została przerwana.
  4. Jeśli Future zakończył się sukcesem, wartość zwrócona przez Future staje się wynikiem wyrażenia await.
  5. Jeśli Future zakończył się błędem (rzucił wyjątek), ten wyjątek zostanie rzucony w miejscu wywołania await.

Przykład:

// Funkcja asynchroniczna oznaczona jako async
Future<String> fetchData() async {
  // Symulacja operacji asynchronicznej (np. żądanie sieciowe)
  await Future.delayed(Duration(seconds: 2));
  return 'Dane z sieci!';
}

void main() async {
  print('Rozpoczęcie pobierania danych...');

  // Użycie await do oczekiwania na zakończenie Future
  try {
    String data = await fetchData();
    print('Odebrane: $data');
  } catch (e) {
    print('Błąd podczas pobierania danych: $e');
  }

  print('Program zakończył działanie (choć await może jeszcze trwać)');
}

W tym przykładzie main jest oznaczone jako async, aby można było używać await. Wywołanie await fetchData() wstrzymuje wykonanie main na 2 sekundy, nie blokując głównego wątku interfejsu użytkownika. Podczas oczekiwania fetchData, inne części aplikacji mogą działać. Gdy fetchData się zakończy, wykonanie main zostanie wznowione, a zmienna data otrzyma zwróconą wartość.