Widget adalah komponen dasar yang digunakan dalam Flutter untuk membangun antarmuka pengguna (UI). Hampir semua elemen visual di aplikasi Flutter merupakan widget, mulai dari teks, tombol, hingga tata letak seperti baris dan kolom. Dalam pengembangan aplikasi, pemahaman tentang jenis widget dan siklus hidupnya menjadi sangat penting untuk menciptakan aplikasi yang responsif dan efisien. Artikel kita kali ini akan membahas pengenalan widget, kategori widget yang berbeda, serta siklus hidup (lifecycle) yang ada pada widget di Flutter.
Apa Itu Widget?
Widget di Flutter mengacu pada kelas atau komponen yang mendefinisikan sebuah tampilan UI. Setiap elemen yang terlihat oleh pengguna di layar, seperti teks, tombol, atau gambar, adalah widget. Bahkan elemen-elemen yang mengatur tata letak atau struktur tampilan seperti Row
dan Column
juga merupakan widget.
Penggunaan widget di Flutter terinspirasi dari framework lain, seperti React, dengan prinsip dasar bahwa UI dibangun dari kumpulan widget yang saling terhubung dalam suatu hierarki yang dikenal sebagai widget tree. Widget tree merupakan representasi visual dari hubungan antar widget dengan pola parent-child. Ketika konfigurasi atau data yang digunakan untuk membangun widget berubah, Flutter akan membangun ulang (rebuild) widget dan turunannya sesuai dengan perubahan tersebut.
Kategori Widget di Flutter
Widget di Flutter dapat dibagi ke dalam beberapa kategori berdasarkan fungsinya:
Layout Widgets
Widget yang digunakan untuk mengatur tata letak atau susunan elemen UI. Contoh:
Row
danColumn
: Menyusun widget secara horizontal atau vertikal.Stack
: Menyusun widget dalam lapisan yang tumpang tindih.Scaffold
: Struktur dasar untuk membangun layout halaman dengan fitur-fitur seperti AppBar, Drawer, dan FloatingActionButton.
Structural Widgets
Widget yang menampilkan elemen UI tertentu seperti teks atau tombol. Contoh:
Text
: Menampilkan teks di layar.Button
: Berbagai jenis tombol, sepertiElevatedButton
,TextButton
, atauIconButton
.Toast
: Untuk menampilkan pesan singkat di layar.
Style Widgets
Widget yang digunakan untuk menentukan gaya atau properti visual elemen UI. Contoh:
TextStyle
: Untuk menentukan gaya teks seperti ukuran font, warna, atau jenis huruf.Color
: Untuk mengatur warna elemen.Padding
: Untuk memberikan ruang di sekitar widget.
Animation Widgets
Widget yang berhubungan dengan animasi atau efek visual. Contoh:
FadeInImage
: Menampilkan gambar dengan efek transisi.ColorTween
: Mentransisikan warna dari satu nilai ke nilai lainnya.
Positioning & Alignment Widgets
Widget yang membantu dalam menentukan posisi dan penempatan widget di layar. Contoh:
Center
: Menempatkan widget di tengah layar.Padding
: Memberikan jarak atau ruang di sekitar widget.
Widget Stateless dan Stateful
Dalam Flutter, terdapat dua jenis widget utama berdasarkan perubahan state atau keadaan:
StatelessWidget
Widget yang bersifat statis dan tidak memiliki perubahan state setelah dibangun. Widget ini cocok untuk elemen yang tidak dipengaruhi oleh perubahan data, seperti teks atau gambar yang tidak berubah.
Pada
StatelessWidget
, metodebuild
hanya dipanggil sekali saat widget pertama kali ditampilkan.
StatefulWidget
Widget yang dapat berubah-ubah keadaannya selama aplikasi berjalan. Biasanya digunakan untuk elemen yang interaktif, seperti tombol yang dapat ditekan atau animasi yang berubah-ubah.
StatefulWidget
memiliki objekState
yang menyimpan informasi tentang state. Ketika state berubah, metodesetState
dipanggil untuk memberi tahu Flutter agar membangun ulang widget dengan state yang baru.
Widget Lifecycle (Siklus Hidup Widget)
Flutter memiliki konsep siklus hidup yang mirip dengan framework pengembangan aplikasi native lainnya seperti Android atau iOS. Namun, berbeda dengan platform tersebut, lifecycle di Flutter berfokus pada State
, bukan widget itu sendiri. Berikut adalah siklus hidup utama pada State
dari sebuah StatefulWidget
:
initState()
- Dipanggil satu kali ketika objek
State
dibuat untuk pertama kalinya. Metode ini digunakan untuk melakukan inisialisasi awal, seperti mengatur variabel atau memulai animasi.
- Dipanggil satu kali ketika objek
build()
- Metode yang bertanggung jawab untuk membangun tampilan (UI) dari widget. Metode ini dipanggil setiap kali widget perlu di-render ulang. Pada saat
setState
dipanggil, Flutter akan memicu siklus build dan menjalankan metode ini lagi.
- Metode yang bertanggung jawab untuk membangun tampilan (UI) dari widget. Metode ini dipanggil setiap kali widget perlu di-render ulang. Pada saat
didUpdateWidget()
- Dipanggil ketika ada perubahan pada
StatefulWidget
yang memiliki runtime type atau key yang sama. Metode ini memungkinkan kita untuk memperbarui state atau properti ketika widget berubah.
- Dipanggil ketika ada perubahan pada
setState()
- Digunakan untuk memberi tahu Flutter bahwa ada perubahan pada state yang perlu di-render ulang. Setelah dipanggil, Flutter akan memanggil kembali metode
build
untuk menampilkan tampilan terbaru.
- Digunakan untuk memberi tahu Flutter bahwa ada perubahan pada state yang perlu di-render ulang. Setelah dipanggil, Flutter akan memanggil kembali metode
deactivate()
- Dipanggil ketika objek
State
dihapus sementara dari widget tree tetapi belum benar-benar dihapus. Biasanya terjadi saat widget dipindahkan dalam hierarki.
- Dipanggil ketika objek
dispose()
- Dipanggil ketika objek
State
dihapus secara permanen dari widget tree. Metode ini digunakan untuk membersihkan sumber daya, seperti menghentikan animasi atau menghapus listener.
- Dipanggil ketika objek
Contoh Alur Lifecycle pada Aplikasi Counter
Misalkan kamu memiliki aplikasi Counter, di mana pengguna dapat menekan tombol untuk meningkatkan nilai penghitung. Alur perubahan state pada aplikasi ini dapat dijelaskan sebagai berikut:
initState(): Ketika aplikasi pertama kali dijalankan,
initState
dipanggil untuk menginisialisasi nilai awal penghitung.build(): Metode ini mem-build tampilan awal aplikasi, menampilkan angka awal pada layar.
setState(): Ketika pengguna menekan tombol,
setState
dipanggil untuk mengubah nilai penghitung.build(): Setelah
setState
dipanggil, metodebuild
dipanggil kembali untuk menampilkan angka penghitung yang baru.dispose(): Jika aplikasi di-close atau widget dihapus dari widget tree, metode
dispose
dipanggil untuk membersihkan sumber daya.
Kesimpulan
Widget merupakan elemen dasar dalam pengembangan aplikasi Flutter. Dengan memahami berbagai jenis widget dan siklus hidup yang terjadi pada StatefulWidget
, kamu dapat mengoptimalkan pengembangan aplikasi untuk menciptakan UI yang interaktif dan efisien. Selalu ingat bahwa menggunakan StatelessWidget
untuk elemen statis dan StatefulWidget
untuk elemen dinamis akan membantu kamu mengelola aplikasi dengan lebih baik. Teruslah bereksplorasi dan memanfaatkan berbagai widget yang disediakan Flutter untuk membangun aplikasi yang lebih menarik dan fungsional.