Pahami Konsep
Versi minimum bahasa Dart yang dibutuhkan: 3.13.
Fungsi: Deklarasikan field + konstruktor utama dalam satu baris di awal kelas, sehingga banyak menghapus kode boilerplate. Perilaku saat runtime sama persis dengan konstruktor tradisional, hanya sintaksnya yang disederhanakan.
- Declaring parameters (parameter deklaratif): Parameter di header kelas yang diberi
var/finalakan otomatis membuat field instansi dengan nama yang sama. - Non-declaring parameters (parameter biasa): Parameter tanpa
var/finalhanya menjadi masukan konstruktor, tidak membuat field kelas. - In-body constructors (konstruktor di dalam kelas): Konstruktor bernama, pabrik, dan pengalih yang ditulis di dalam kurung kurawal kelas.
- Aturan wajib: Kelas yang memiliki konstruktor utama tidak boleh memiliki konstruktor generatif lain yang bukan pengalih, agar semua instansi pasti melewati konstruktor utama saat dibuat.
Perbandingan sintaks lama vs singkatan konstruktor utama
// Sintaks lama (berulang-ulang)
class Point {
int x;
int y;
Point(this.x, this.y);
}
// Singkatan konstruktor utama
class Point(var int x, var int y);Code language: JavaScript (javascript)
Aturan Pembuatan Field Otomatis
1. Menggunakan var / final
Field instansi akan dibuat secara otomatis.
Tulis variabel field langsung di dalam kurung setelah nama kelas.
// x dan y otomatis menjadi variabel anggota kelas
class Point(var int x, final int y);
void main() {
final p = Point(10, 20);
print(p.x); // 10
print(p.y); // 20
// p.y = 30; // Error, y bertipe final tidak bisa diubah
}Code language: JavaScript (javascript)
Kode di atas akan menghasilkan error saat dijalankan.
D:\dartdemo\firstdart\bin>dart run
Building package executable...
Failed to build firstdart:firstdart:
firstdart.dart:2:13: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
Try passing the '--enable-experiment=primary-constructors' command line option.
class Point(var int x, final int y);
^^^
firstdart.dart:2:12: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
Try passing the '--enable-experiment=primary-constructors' command line option.
class Point(var int x, final int y);
^
firstdart.dart:2:36: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
Try passing the '--enable-experiment=primary-constructors' command line option.
class Point(var int x, final int y);Code language: JavaScript (javascript)
Penyebab error: Singkatan sintaks class Point(var int x, final int y); bernama Primary Constructors (konstruktor utama) adalah fitur eksperimental Dart. Di versi stabil sekarang fitur ini dinonaktifkan secara bawaan, sehingga langsung jalankan akan muncul error sintaks.
Tanggal sekarang: 10 Juli 2026, pukul 14:55. Mungkin saat pembaca membaca artikel ini, Dart sudah merilis versi resmi baru yang mendukung sintaks ini secara default.
Gunakan perintah berikut untuk tes sementara:
dart run --enable-experiment=primary-constructors

2. Tanpa var / final
Hanya parameter sementara, tidak membuat field apa pun.
class User(String name) {
// print(name); // Bisa akses parameter langsung di dalam kelas, tapi tidak membuat field this.name
final String msg = "Hi $name"; // Error kompilasi
}
void main() {
final u = User("Tom");
// print(u.name); // Error kompilasi: field name tidak ada
}Code language: JavaScript (javascript)