Catatan Programmer

Key yang dibuat super.key

 

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

About