← Flutter / Dart

Flutter / Dart · 08 / 18

Null Safety, Fehler und Future

Du behandelst fehlende Werte und wartest auf ein asynchrones Ergebnis.

  • Klein
  • Grundlagen
  • 15 min

Voraussetzungen: Klassen und Konstruktoren

Manche Aufgaben dauern, etwa das Lesen einer Datei. Ein Future ist ein Versprechen auf ein späteres Ergebnis oder einen Fehler. async erlaubt await in einer Funktion. await wartet auf das Ergebnis dieser Aufgabe, ohne daraus automatisch eine neue parallele CPU-Arbeit zu machen. Fehlende Werte und fehlgeschlagene Aufgaben sind zwei verschiedene Fälle.

Beispieldateien

01Ein Ergebnis später liefern

loadName liefert Future<String?>. Das Ergebnis darf Text oder null sein. Future.delayed simuliert eine Wartezeit. In einer echten App könnte stattdessen eine Datei oder Datenbank gelesen werden.

async.dart · dartDatei öffnen
Future<String?> loadName() async {
  await Future<void>.delayed(const Duration(milliseconds: 100));
  return null;
}

Future<void> main() async {
  try {
    final name = await loadName();
    print(name ?? 'No vehicle yet');
  } catch (error) {
    print('Loading failed: $error');
  }
}

Starten / prüfen

dart run async.dart

02await und ?? verwenden

await loadName() liefert den späteren Wert. ?? behandelt anschließend nur null. Eine geworfene Exception überspringt dagegen die normale Ergebnisverarbeitung und erreicht catch.

03Fehler sichtbar behandeln

Ändere loadName probeweise zu throw StateError("Cannot load"). Die Fehlermeldung zeigt den anderen Weg. In einer Oberfläche unterscheiden wir später Laden, Erfolg, leere Daten und Fehler. Ein leerer Name darf nicht still als erfolgreicher Ladevorgang mit erfundenen Daten erscheinen.

Erwartetes Ergebnis

Nach kurzer Wartezeit: No vehicle yet

Deine Übung

Liefere Family car statt null. Entferne danach await und beobachte den Typ des Ergebnisses.

Lösung mit Erklärung anzeigen

Mit await erhältst du String?. Ohne await erhältst du Future<String?>. Das ist die noch nicht abgeschlossene Aufgabe und nicht der fertige Name. Setze await wieder ein, bevor du den Namen weiterverarbeitest.

Projektbezug und Quellen

Das Beispiel ist zum Lernen vereinfacht. Die verlinkte Codeversion zeigt die Anwendung im Projekt und die dortigen Prüfungen.