Czekanie z async i await
Część sekcji Dane i sieć ścieżki Flutter w Coddy. Lekcja 2 z 27.
Aplikacja do parzenia herbaty powinna najpierw wyświetlić Boiling..., a później Tea is ready. Gdy używasz wywołania zwrotnego wewnątrz Future.delayed, trudno odczytać kolejność. Dart oferuje czytelniejszy sposób: await.
Future<void> boil() async {
setState(() {
message = 'Boiling...';
});
await Future.delayed(const Duration(seconds: 3));
setState(() {
message = 'Tea is ready';
});
}await wstrzymuje tę funkcję do zakończenia przyszłości, a następnie przechodzi do kolejnej linii. Kod czyta się od góry do dołu, zgodnie z kolejnością wykonywania.
Z tym wiążą się dwie zasady. Funkcja używająca await jest oznaczona jako async. Funkcja async zwraca Future: Future<void>, gdy niczego nie zwraca. Wstrzymuje się tylko ta funkcja. Reszta aplikacji działa dalej.
Wyzwanie
ŁatwyPrzepisz boil z użyciem async i await:
- zaraz po dotknięciu komunikat to
Boiling... - 3 sekundy później komunikat to
Tea is ready
Spróbuj swoich sił
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: TeaScreen(),
);
}
}
class TeaScreen extends StatefulWidget {
const TeaScreen({super.key});
@override
State<TeaScreen> createState() => _TeaScreenState();
}
class _TeaScreenState extends State<TeaScreen> {
String message = 'The water is cold';
void boil() {
Future.delayed(const Duration(seconds: 3), () {
setState(() {
message = 'Tea is ready';
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(message, style: const TextStyle(fontSize: 28)),
const SizedBox(height: 24),
ElevatedButton(onPressed: boil, child: const Text('Boil water')),
],
),
),
);
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Dane i sieć
1Obiekty Future
Wartość, która pojawia się późniejCzekanie z async i awaitFunkcje zwracające obiekty FutureĆwiczeniowe API Coddy'ego3Gdy wywołania kończą się niepowodzeniem
Przechwytywanie błędów za pomocą tryZgłaszanie błęduSprzątanie za pomocą finallyStan błędu w FutureBuilderPrzycisk „Spróbuj ponownie”Poćwicz samodzielnie: Kompilator Flutter online