Runtime ErrorDartFlutterNull Safety6 mnt baca
Mengatasi Null check operator used on null value di Dart
Crash Flutter paling umum dari null safety: operator ! dipakai pada nilai yang ternyata null.
1 · Gejala & Log Pesan Error
error.log
Null check operator used on null value #0 _HomePageState.build (package:app/main.dart:58:32) #1 StatefulElement.build (package:flutter/src/widgets/framework.dart:...) ... Another exception was thrown during a service extension callback.
2 · Akar Penyebab Masalah
Kamu Berjanji "Pasti Tidak Null", Ternyata Null
Operator ! (null check operator) adalah janjimu ke compiler: "nilai ini pasti tidak null, percaya padaku". Compiler percaya dan mematikan pemeriksaannya. Kalau saat runtime nilainya ternyata null, aplikasi crash seketika tanpa ampun.
Ini sering terjadi pada:
- Data dari API yang field-nya ternyata kosong untuk sebagian item.
- Controller/variabel yang diinisialisasi belakangan (
late) tapi dipakai sebelum siap. - Hasil
find/pencarian yang tidak ketemu lalu dipaksa dengan!.
3 · Solusi & Diff Kode
✕ Sebelum (bermasalah)
before
// ❌ crash kalau user.name ternyata null
Text(
user.name!, // janji palsu
style: const TextStyle(fontSize: 18),
);
// ❌ pola berbahaya lain
final foto = user.photo!;
Image.network(foto);✓ Sesudah (diperbaiki)
after
// ✔ beri default yang masuk akal
Text(
user.name ?? "Pengguna",
style: const TextStyle(fontSize: 18),
);
// ✔ atau tampilkan widget berbeda saat null
if (user.photo == null) {
return const Icon(Icons.person);
}
return Image.network(user.photo!); // aman: sudah dicek di atasLangkah Perbaikan
- Lihat nomor baris di stack trace: itulah lokasi
!yang berkhianat. - Tanya: bisakah nilai ini null di dunia nyata? Kalau ya (data API, input user, hasil pencarian),
!adalah pilihan yang salah. - Ganti dengan yang jujur:
?? defaultkalau ada nilai fallback yang masuk akal.if (x == null)+ early return / widget alternatif kalau null butuh penanganan khusus.?.untuk memanggil method dengan aman:user.name?.toUpperCase().
- Aturan praktis:
!hanya untuk kasus yang kamu bisa buktikan tidak null (mis. setelahif (x != null)di baris sebelumnya, atau inisialisasi yang pasti terjadi diinitState). Sisanya, tangani null-nya.