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:
- Gdy wykonanie dociera do linii z
await, bieżąca funkcja jest wstrzymywana. - 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.
- 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. - Jeśli
Futurezakończył się sukcesem, wartość zwrócona przezFuturestaje się wynikiem wyrażeniaawait. - Jeśli
Futurezakończył się błędem (rzucił wyjątek), ten wyjątek zostanie rzucony w miejscu wywołaniaawait.
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ść.