Spread-Operatoren Spread operators ... und ...?
Wertet einen Collection-Ausdruck aus, entpackt alle Elemente der Sammlung vollständig und fügt sie in ein anderes Collection-Literal (Liste, Set, Map) ein
Sie zählen nicht zu den Operatorausdrücken: ... und ...? sind keine Operatoren im herkömmlichen Sinne, sondern syntaktischer Zucker
Es gibt zwei Varianten
...collection: Normales Spread. Die Sammlung darf niemals null sein; bei Übergabe von null wird sofort ein Fehler ausgelöst
...?collection: Null-sicheres Spread. Ist die Sammlung null, wird sie einfach ignoriert, es wird keine Exception geworfen
Die offiziellen Beispiele machen die Funktionsweise leicht verständlich
void main() {
final list1 = [1, 2, 3];
final list2 = [0, ...list1, 4, 5];
print(list2); // [0, 1, 2, 3, 4, 5]
// Null-sicheres Spread
List<int>? maybeList;
final safeList = [10, ...?maybeList, 20];
print(safeList); // [10, 20], kein Fehler wenn maybeList null ist
}Code-Sprache: Dart (dart)
Das obige Beispiel zeigt zwei Sammlungen: Die erste enthält die drei Elemente 1, 2, 3. Bei der zweiten Sammlung wird die erste hinter der Zahl 0 eingefügt, anschließend folgen 4 und 5 – das Ergebnis lautet [0, 1, 2, 3, 4, 5]
Das zweite Beispiel funktioniert ebenfalls mit Einfügen, aber da maybeList null ist und der null-sichere Spread verwendet wird, werden keine Elemente eingefügt, das Ergebnis bleibt unverändert und es entsteht kein Fehler
Beispiel mit Set
void main() {
final set1 = {1, 2};
final set2 = {3, ...set1, 4};
print(set2); // {3, 1, 2, 4}
}Code-Sprache: PHP (php)

Beispiel mit Map
void main() {
final map1 = {'a': 1, 'b': 2};
final map2 = {'c': 3, ...map1, 'd': 4};
print(map2); // {c: 3, a: 1, b: 2, d: 4}
}Code-Sprache: PHP (php)
Wichtige Hinweise
... darf nicht einzeln außerhalb von [] und {} verwendet werden
void main() {
final list1 = [1, 2, 3];
var arr = ...list; // Syntaxfehler, nur innerhalb eines Collection-Literals erlaubt
}Code-Sprache: PHP (php)
D:\dartdemo\firstdart>dart run
Building package executable...
Failed to build firstdart:firstdart:
bin/firstdart.dart:3:12: Error: Expected an identifier, but got '...'.
Try inserting an identifier before '...'.
var arr = ...list; // Syntaxfehler, nur innerhalb eines Collection-Literals erlaubt
^^^
bin/firstdart.dart:3:12: Error: Expected ';' after this.
var arr = ...list; // Syntaxfehler, nur innerhalb eines Collection-Literals erlaubt
^^^
bin/firstdart.dart:3:15: Error: Undefined name 'list'.
var arr = ...list; // Syntaxfehler, nur innerhalb eines Collection-Literals erlaubtCode-Sprache: PHP (php)
Wird ... direkt auf einen null-Wert angewendet, kommt es zu einem Laufzeitfehler. Bei möglichen null-Werten muss stets ...? genutzt werden
void main() {
List<int>? list = null;
var res = [...list]; // Löst einen Fehler aus
var resSafe = [...?list]; // Funktioniert problemlos
}Code-Sprache: PHP (php)
D:\dartdemo\firstdart>dart run
Building package executable...
Failed to build firstdart:firstdart:
bin/firstdart.dart:3:16: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
var res = [...list]; // Löst einen Fehler ausCode-Sprache: PHP (php)