Kurz: - dart.dev/language (Sprachtour), dart.dev/tutorials, flutter.dev/learn - DartPad (dartpad.dev), Flutter-Codelabs, Flutter in Action - Übungen: Exercism (Dart-Track), Advent of Code - Wiki dieser Seite.
Teil des Kurses Dart
Syntax im Überblick
var x = 1; final y = 2; const z = 3; int? n; late String s;
int f(int a, {int b = 0, required String c}) => a + b; void g([int a = 1]) {}
if (...) {} else {} switch (x) { case 1: ... } for (var i = 0; i < n; i++) {} for (final e in liste) {}
class A extends B with M implements I { A(this.x); final int x; } abstract class T {} mixin M {} enum E { a, b }
extension X on String { int get doppelt => length * 2; } sealed class S {}
Future<int> h() async { return await andere(); } Stream<int> s() async* { yield 1; }
try {} on Fehler catch (e, st) {} finally {} throw Exception('...');Wichtige Typen und Methoden
| Typ | Beispiele |
|---|---|
int, double, num | abs round floor ceil toStringAsFixed parse tryParse isEven |
String | length substring split trim replaceAll contains startsWith toUpperCase padLeft |
List<T> | add insert remove sort map where reduce fold any every take skip join |
Map<K, V> | [k], containsKey, putIfAbsent, update, forEach, entries, keys, values |
Set<T> | add contains union intersection difference |
Future<T> / Stream<T> | then, await, Future.wait, listen, await for, map, where |
| Dateien/JSON | File.readAsString, jsonEncode, jsonDecode |
Dart im Vergleich
| Thema | Dart |
|---|---|
| Typisierung | statisch, null-sicher, mit Inferenz (var) |
| Nebenläufigkeit | Future/Stream mit async/await; Parallelität über Isolates (kein gemeinsamer Speicher) |
| Zugriff | privat durch _ vor dem Namen (pro Bibliothek) |
| Kompilierung | JIT (Entwicklung, Hot Reload), AOT (Release), JavaScript (Web) |
| Pakete | pub.dev, pubspec.yaml |
Häufige Fehler
| Meldung / Problem | Ursache |
|---|---|
A value of type 'int?' can't be assigned to a variable of type 'int' | Null-Sicherheit: ??, ! oder Prüfung |
The method 'x' isn't defined for the type 'Object?' | Typ zu allgemein (dynamic/Object): Typ angeben oder casten |
Null check operator used on a null value | ! auf null |
type 'X' is not a subtype of type 'Y' | falscher Typ zur Laufzeit (JSON!): as-Casts prüfen |
LateInitializationError | late Variable vor Zuweisung gelesen |
Fehlendes await | Future statt Wert: await oder .then |
setState() called after dispose() | Flutter: async-Ergebnis nach Verlassen der Seite; mounted prüfen |
| Pfeilsyntax mit mehreren Anweisungen | => nur für Ausdrücke; sonst { ... } |
Weiterlernen
- dart.dev/language (Sprachtour), dart.dev/tutorials, flutter.dev/learn
- DartPad (dartpad.dev), Flutter-Codelabs, Flutter in Action
- Übungen: Exercism (Dart-Track), Advent of Code
- Wiki dieser Seite: Artikel zu mobilen Apps und plattformübergreifender Entwicklung
Merke
- Dart: moderne, null-sichere OOP-Sprache mit
Future/Streamund Records/Mustern (Dart 3) - Flutter baut Oberflächen aus Widgets für alle Plattformen
dart analyze,dart format,dart testgehören zum Alltag
Quiz zur Selbstkontrolle
Was sind Isolates?
- Dart-Einheiten für Parallelität ohne gemeinsamen Speicher (richtig)
- Ein Paketformat
- Ein Fehlertyp
- Eine Datenbank
Welche Datei beschreibt Abhängigkeiten eines Dart-Projekts?
- pubspec.yaml (richtig)
- package.json
- build.gradle
- Cargo.toml
Was bedeutet der Operator ! hinter einem Ausdruck (x!)?
- Behauptung “nicht null”; führt bei null zum Laufzeitfehler (richtig)
- Logisches Nicht
- Fakultät
- Verneinung des Typs
Weiter im Kurs
Zurück: Projekte und Algorithmen
Alle Kapitel: Dart im Überblick