Warten mit async und await
Teil des Abschnitts Daten und Netzwerk der Flutter-Journey von Coddy. Lektion 2 von 27.
Die Tee-App sollte zuerst Boiling... und später Tea is ready anzeigen. Mit einem Callback innerhalb von Future.delayed ist die Reihenfolge schwer zu erkennen. Dart bietet eine klarere Möglichkeit: await.
Future<void> boil() async {
setState(() {
message = 'Boiling...';
});
await Future.delayed(const Duration(seconds: 3));
setState(() {
message = 'Tea is ready';
});
}await pausiert diese Funktion, bis das Future abgeschlossen ist, und fährt dann mit der nächsten Zeile fort. Der Code lässt sich von oben nach unten lesen – in der Reihenfolge, in der die Dinge passieren.
Dazu gehören zwei Regeln. Eine Funktion, die await verwendet, wird mit async gekennzeichnet. Eine async-Funktion gibt ein Future zurück: Future<void>, wenn sie nichts zurückgibt. Nur diese Funktion pausiert. Der Rest der App läuft weiter.
Aufgabe
EinfachSchreibe boil mit async und await um:
- direkt nach dem Tippen ist die Nachricht
Boiling... - 3 Sekunden später lautet sie
Tea is ready
Probier es selbst
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')),
],
),
),
);
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Daten und Netzwerk
1Futures
Ein Wert, der später verfügbar wirdWarten mit async und awaitFunktionen, die Futures zurückgebenCoddys Übungs-API2Ladebildschirme
Ein Spinner während des LadensFutureBuilder kennenlernenEinmalig in initState ladenDaten per Button neu ladenZum Aktualisieren nach unten ziehen5Datumsangaben und Preise
Datumsangaben mit DateFormatUhrzeiten mit DateFormatPreise mit NumberFormatÜbe selbstständig: Online-Flutter-Compiler