Materi
Kelas mengelompokkan data (field) dan perilaku (method). Konstruktor dengan parameter this.tujuan langsung mengisi field tujuan, jadi badan konstruktor tidak perlu ditulis. Pola { required this.tujuan, this.kursi = 1 } membuat konstruktor berparameter bernama, persis seperti konstruktor widget. Field final hanya diisi sekali, saat objek dibuat; mengubahnya kemudian ditolak analyzer. Bila semua field final, konstruktor boleh diberi const, dan objek yang dibuat dengan const dibangun saat kompilasi.
class Tiket {
final String tujuan;
final int harga;
final int kursi;
const Tiket({required this.tujuan, required this.harga, this.kursi = 1});
// Konstruktor bernama: tiket rombongan berisi 10 kursi.
const Tiket.rombongan(String tujuan, int harga)
: this(tujuan: tujuan, harga: harga, kursi: 10);
bool get perorangan => kursi == 1;
int total() => harga * kursi;
@override
String toString() => 'Tiket ke $tujuan untuk $kursi kursi';
}
void main() {
const a = Tiket(tujuan: 'Semarang', harga: 120000);
const b = Tiket.rombongan('Solo', 95000);
print(a.perorangan); // true
print(b.total()); // 950000
print(b); // Tiket ke Solo untuk 10 kursi
}Getter ditulis dengan get dan dibaca tanpa kurung seperti field: a.perorangan. Getter cocok untuk nilai turunan dari field lain, seperti perorangan yang dihitung dari kursi. Method dipanggil dengan kurung: b.total(). Konstruktor bernama seperti Tiket.rombongan memberi cara lain membuat objek; di modul 4 bentuk serupa dipakai sebagai factory Produk.fromJson untuk membuat objek dari JSON. print(objek) memanggil toString(), dan kelas yang tidak menimpanya hanya mencetak Instance of diikuti nama kelasnya.