Operator Spread Spread operators ... dan ...?
Mengevaluasi ekspresi koleksi, membongkar semua elemen di dalam koleksi lalu mengeluarkannya untuk dimasukkan ke literal koleksi lain (List, Set, Map)
Bukan termasuk ekspresi operator, ... dan ...? bukanlah operator dalam pengertian tradisional, melainkan gula sintaksis
Terdapat dua jenis
...collection: Spread biasa. Koleksi wajib tidak bernilai null; jika mengirimkan null akan langsung muncul error
...?collection: Spread aman null. Apabila koleksi bernilai null, akan diabaikan tanpa memunculkan exception
Lihat contoh resmi agar mudah dipahami
void main() {
final list1 = [1, 2, 3];
final list2 = [0, ...list1, 4, 5];
print(list2); // [0, 1, 2, 3, 4, 5]
// Spread aman null
List<int>? maybeList;
final safeList = [10, ...?maybeList, 20];
print(safeList); // [10, 20], tidak ada error meskipun maybeList bernilai null
}Code language: Dart (dart)
Contoh di atas menggunakan dua koleksi, koleksi pertama berisi tiga elemen 1, 2, 3. Koleksi kedua memasukkan koleksi pertama setelah angka 0, kemudian menambahkan 4 dan 5 sehingga hasil akhir menjadi [0, 1, 2, 3, 4, 5]
Contoh kedua juga melakukan penyisipan, namun karena maybeList bernilai null dan menggunakan spread aman null, tidak ada elemen yang dimasukkan, hasil tidak berubah dan tidak muncul error sama sekali
Contoh Set
void main() {
final set1 = {1, 2};
final set2 = {3, ...set1, 4};
print(set2); // {3, 1, 2, 4}
}Code language: PHP (php)

Contoh 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 language: PHP (php)
Catatan Penting
Tidak bisa menggunakan ... secara terpisah di luar tanda kurung [] dan kurung kurawal {}
void main() {
final list1 = [1, 2, 3];
var arr = ...list; // Error sintaksis, hanya boleh ditulis di dalam literal koleksi
}Code language: 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; // Error sintaksis, hanya boleh ditulis di dalam literal koleksi
^^^
bin/firstdart.dart:3:12: Error: Expected ';' after this.
var arr = ...list; // Error sintaksis, hanya boleh ditulis di dalam literal koleksi
^^^
bin/firstdart.dart:3:15: Error: Undefined name 'list'.
var arr = ...list; // Error sintaksis, hanya boleh ditulis di dalam literal koleksiCode language: PHP (php)
Menggunakan ... langsung pada nilai null akan menimbulkan error saat runtime. Jika variabel berpotensi bernilai null, wajib pakai ...?
void main() {
List<int>? list = null;
var res = [...list]; // Akan muncul error
var resSafe = [...?list]; // Berjalan normal
}Code language: 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]; // Akan muncul errorCode language: PHP (php)