Pertanyaan bagus banget! Kamu bertanya:
“Lalu
keyyang dibuatnya itu mana?”
Jawaban singkat:
key dibuat secara implisit oleh Flutter saat kamu membuat instance widget dan memberinya key, lalu diteruskan lewat constructor.
Penjelasan Lengkap
Misalnya kamu punya widget seperti ini:
class MyWidget extends StatelessWidget {
const MyWidget({super.key});
@override
Widget build(BuildContext context) {
return Text('Halo!');
}
}
Kamu bisa membuat instance-nya seperti ini:
MyWidget(key: ValueKey('unik'));
Nah, di sinilah key dibuat secara eksplisit oleh kamu, lalu dikirim ke constructor:
const MyWidget({Key? key}) : super(key: key);
Kalau kamu tidak memberi key, maka key bernilai null, dan itu artinya Flutter tidak bisa membedakan instance widget ini dari yang lain, jadi kemungkinan akan di-rebuild ulang terus.
Jadi: siapa yang “membuat” key?
-
Kamu sendiri, saat menulis seperti ini:
MyWidget(key: ValueKey('xyz')) -
Atau framework Flutter secara internal saat membangun widget tree dengan list/listview, dsb.
Contoh Kasus Nyata
Tanpa Key:
ListView(
children: [
TodoItem(title: 'A'),
TodoItem(title: 'B'),
],
);
Kalau urutan diubah, widget akan dianggap baru dan dibangun ulang dari awal.
Dengan Key:
ListView(
children: [
TodoItem(key: ValueKey('a'), title: 'A'),
TodoItem(key: ValueKey('b'), title: 'B'),
],
);
Saat diubah urutan, Flutter tahu:
-
ValueKey('a')tetap ada, tinggal pindah posisi -
Tidak perlu bangun ulang dari nol
| Hal yang Ditanyakan | Jawaban |
|---|---|
| “Key-nya dibuat di mana?” | Saat kamu menulis MyWidget(key: ValueKey(...)) saat memanggil widget |
| “Kalau gak ditulis key?” | Maka key == null, artinya widget dianggap bisa dibangun ulang bebas |
| “super.key gunanya?” | Meneruskan key ke parent StatelessWidget agar Flutter bisa track |
No comments:
Post a Comment