Flutter adalah framework UI modern dari Google yang membuat proses membangun aplikasi mobile, web, dan desktop jadi lebih cepat, efisien, dan menyenangkan. Salah satu hal yang membuat Flutter berbeda dari framework lain adalah konsep widget dan reactive UI-nya. Nah, di balik semua keajaiban UI Flutter, ada satu metode yang selalu muncul di setiap widget: build()
.
Kalau kamu baru memulai Flutter, mungkin pernah melihat kode seperti ini:
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Hello Flutter!'),
),
body: Center(
child: Text('Selamat datang di Flutter!'),
),
);
}
}
Di sinilah build()
bekerja. Tapi apa sebenarnya fungsi build()
, kenapa penting, dan bagaimana cara memaksimalkannya? Yuk, kita bahas dengan santai.
1. Apa Itu build()
di Flutter?
Secara sederhana, build()
adalah metode yang memberitahu Flutter bagaimana widget harus ditampilkan di layar. Metode ini wajib ada di semua widget, baik itu StatelessWidget
maupun StatefulWidget
.
-
StatelessWidget: widget yang tidak menyimpan state internal.
build()
hanya dijalankan sekali saat widget pertama kali dibuat, kecuali ada parent widget yang memaksa rebuild. -
StatefulWidget: widget yang bisa berubah-ubah karena adanya state.
build()
akan dipanggil ulang setiap kalisetState()
dijalankan.
Bayangkan build()
sebagai resep masakan UI. Setiap kali bahan (state) berubah, resep ini dibaca ulang, dan masakan (UI) yang baru dibuat.
2. Signature build()
Kalau kamu buka kelas StatelessWidget
atau State
, kamu akan melihat signature build()
seperti ini:
@override
Widget build(BuildContext context)
-
Widget
→ tipe data yang dikembalikan. Semua UI di Flutter adalah widget, mulai dari tombol hingga layout kompleks. -
BuildContext context
→ informasi tentang lokasi widget dalam tree Flutter, tema, ukuran layar, dan lain-lain. Bisa dibilang context adalah “alamat rumah” widget di pohon widget.
Jadi setiap kali kamu membuat widget baru di dalam build()
, widget tersebut tahu “di mana dia berada” dan “apa yang sedang terjadi di sekitarnya”.
3. Kenapa build()
Penting?
build()
adalah inti dari reactive programming di Flutter. Setiap kali ada perubahan state, Flutter akan memanggil build()
lagi untuk widget terkait, sehingga UI selalu up-to-date tanpa kita harus menulis kode manual untuk refresh tampilan.
Keuntungan build()
antara lain:
-
UI selalu sinkron dengan data
Misalnya kamu punya tombol yang mengubah counter, begitusetState()
dipanggil,build()
otomatis dijalankan dan menampilkan angka terbaru.class CounterWidget extends StatefulWidget { @override State<CounterWidget> createState() => _CounterWidgetState(); } class _CounterWidgetState extends State<CounterWidget> { int counter = 0; @override Widget build(BuildContext context) { return Column( children: [ Text('Counter: $counter'), ElevatedButton( onPressed: () { setState(() { counter++; }); }, child: Text('Tambah'), ), ], ); } }
-
Mudah diatur dan modular
Kamu bisa memecah UI menjadi widget kecil, lalu masing-masing punyabuild()
sendiri. Ini membuat kode lebih bersih dan mudah dipelihara. -
Optimasi performa
Flutter hanya membangun ulang widget yang benar-benar berubah. Jadi meskipunbuild()
dipanggil berkali-kali, hanya bagian yang perlu di-render yang akan diupdate.
4. Kapan build()
Dipanggil?
Berikut beberapa situasi umum yang memicu pemanggilan build()
:
-
Widget pertama kali dibuat → inisialisasi awal UI.
-
setState()
dipanggil → widget stateful memberitahu Flutter untuk rebuild. -
Parent widget melakukan perubahan → jika parent widget rebuild, anaknya mungkin juga ikut rebuild tergantung kondisi.
-
Hot reload → ketika kamu menekan hot reload di editor,
build()
dijalankan ulang sehingga perubahan kode langsung terlihat di UI.
Perlu dicatat, build()
bisa dipanggil berkali-kali, jadi hindari menaruh kode berat atau operasi berat di dalam build()
karena bisa menurunkan performa aplikasi.
5. Tips Menggunakan build()
dengan Baik
Agar UI tetap responsif dan performa terjaga, berikut beberapa tips:
-
Pisahkan widget
Jangan masukkan semua UI dalam satubuild()
. Pecah menjadi widget kecil agar hanya widget yang berubah yang di-render ulang. -
Hindari logika berat di
build()
Misalnya operasi jaringan atau perhitungan kompleks sebaiknya dilakukan diinitState()
atau metode async, bukan dibuild()
. -
Gunakan
const
Jika widget tidak berubah, tandai denganconst
supaya Flutter tahu widget itu statis dan tidak perlu dibangun ulang.const Text('Ini widget statis')
-
Optimalkan layout dengan widget khusus
Misalnya gunakanListView.builder
untuk daftar panjang, sehingga hanya item yang terlihat di layar yang di-render, bukan semuanya.
6. build()
dan Reactive UI
Flutter menggunakan pendekatan reactive: UI bereaksi terhadap perubahan data. build()
adalah jembatan antara data dan tampilan.
Misalnya kamu punya tema gelap/terang yang bisa diganti:
class ThemeSwitcher extends StatefulWidget {
@override
State<ThemeSwitcher> createState() => _ThemeSwitcherState();
}
class _ThemeSwitcherState extends State<ThemeSwitcher> {
bool isDark = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: isDark ? ThemeData.dark() : ThemeData.light(),
home: Scaffold(
appBar: AppBar(title: Text('Switcher')),
body: Center(
child: ElevatedButton(
onPressed: () {
setState(() {
isDark = !isDark;
});
},
child: Text('Ganti Tema'),
),
),
),
);
}
}
Setiap kali tombol ditekan, setState()
memicu build()
dan tema langsung berubah. Itu dia kekuatan reactive UI di Flutter.
7. Kesalahan Umum dengan build()
Biar pengalaman codingmu lebih lancar, hindari kesalahan berikut:
-
Menaruh operasi berat di build()
Contoh salah: memanggil API atau query database langsung dibuild()
. Solusinya: pakaiFutureBuilder
atauinitState()
. -
Membuat widget terlalu besar
Kalau satubuild()
punya ratusan baris kode, akan sulit dibaca dan debug. Pecah menjadi beberapa widget. -
Tidak menggunakan const ketika perlu
Widget statis tanpaconst
akan selalu dibangun ulang. Bisa membuat performa menurun terutama pada daftar panjang.
build()
adalah jantung dari UI Flutter. Tanpa build()
, tidak akan ada tampilan, tidak ada reactive UI, dan tidak ada cara untuk menyajikan widget di layar.
Beberapa poin penting:
-
Semua widget punya
build()
untuk mendeskripsikan tampilan. -
Stateful widget memanggil
build()
setiap ada perubahan state. -
Stateless widget memanggil
build()
sekali, kecuali parent rebuild. -
Hindari logika berat di dalam
build()
. -
Gunakan
const
dan pecah widget agar performa tetap optimal.
Kalau kamu menguasai konsep build()
, berarti kamu sudah memegang kunci untuk membuat UI Flutter yang responsif, bersih, dan mudah dipelihara. Flutter memang menyenangkan, tapi memahami build()
adalah langkah pertama agar codingmu lebih efisien dan profesional.
Tips :
-
Gunakan hot reload untuk melihat perubahan
build()
secara realtime. -
Biasakan pecah UI menjadi widget kecil untuk meningkatkan modularitas.
Pahami konteks (
BuildContext
) karena sering dipakai untuk mengambil tema, ukuran layar, atau navigator.
0 Comments:
Post a Comment