Pertanyaan bagus banget! Kamu bertanya:
“Lalu
key
yang 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