Mengenal Widget Flutter
๐ฑ Mengenal Widget Flutter: Panduan Lengkap dari Dasar hingga Membuat Tampilan Aplikasi
Flutter bukan sekadar framework untuk membuat aplikasi. Flutter adalah dunia yang dibangun dari widget.
Mulai dari teks, tombol, gambar, ikon, jarak, warna, hingga seluruh halaman aplikasi—semuanya dapat dibangun menggunakan widget.
Jika kamu sedang belajar Flutter, memahami widget adalah salah satu hal paling penting. Dengan memahami widget, kamu akan lebih mudah membuat tampilan aplikasi Android, iOS, web, maupun desktop dengan desain yang menarik dan responsif.
๐ Apa Itu Flutter?
Flutter adalah framework open-source yang dikembangkan oleh Google untuk membangun aplikasi menggunakan satu basis kode.
Flutter menggunakan bahasa pemrograman Dart.
Dengan Flutter, developer dapat membuat aplikasi untuk berbagai platform seperti:
๐ฑ Android
๐ iOS
๐ Web
๐ฅ️ Windows
๐ macOS
๐ง Linux
Salah satu keunggulan Flutter adalah konsep Everything is a Widget.
Artinya, hampir seluruh bagian antarmuka aplikasi Flutter dibangun menggunakan widget.
Contohnya:
Text("Hello Flutter")
adalah widget.
Begitu juga:
Icon(Icons.home)
adalah widget.
Bahkan:
Scaffold()
juga merupakan widget.
๐งฉ Apa Itu Widget Flutter?
Widget adalah komponen dasar yang digunakan untuk membangun tampilan dan struktur aplikasi Flutter.
Bayangkan kamu sedang membangun sebuah rumah.
๐งฑ Widget = bahan bangunan
๐ Widget Tree = struktur rumah
๐จ Property = warna, ukuran, bentuk, dan karakteristik
⚙️ State = kondisi atau keadaan komponen
๐ฑ Application = rumah yang sudah selesai dibangun
Dengan menggabungkan berbagai widget, kita dapat membuat tampilan aplikasi yang kompleks.
Contohnya sebuah halaman login dapat terdiri dari:
Scaffold
└── Column
├── Image
├── Text
├── TextField
├── TextField
└── ElevatedButton
Semua komponen tersebut merupakan widget.
๐ณ Mengenal Widget Tree
Salah satu konsep penting dalam Flutter adalah Widget Tree.
Widget Tree adalah struktur bertingkat yang menunjukkan hubungan antara widget satu dengan widget lainnya.
Contohnya:
MaterialApp
│
└── Scaffold
│
├── AppBar
│
└── Center
│
└── Text
Contoh kode:
MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text("Belajar Flutter"),
),
body: const Center(
child: Text("Hello Flutter!"),
),
),
);
Pada kode tersebut:
MaterialAppmenjadi widget utama.Scaffoldmenyediakan struktur halaman.AppBarmembuat bagian atas aplikasi.Centermenempatkan widget di tengah.Textmenampilkan tulisan.
๐️ Struktur Dasar Aplikasi Flutter
Contoh aplikasi Flutter sederhana:
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text("Aplikasi Pertama"),
),
body: const Center(
child: Text(
"Hello Flutter!",
style: TextStyle(
fontSize: 24,
),
),
),
),
);
}
}
Penjelasan
main()
void main() {
runApp(const MyApp());
}
main() merupakan titik awal program Flutter.
runApp()
runApp(const MyApp());
Digunakan untuk menjalankan widget utama aplikasi.
MaterialApp
MaterialApp()
Digunakan sebagai dasar aplikasi yang menggunakan Material Design.
Scaffold
Scaffold()
Menyediakan struktur dasar halaman seperti:
AppBar
Body
FloatingActionButton
Drawer
BottomNavigationBar
๐ Jenis-Jenis Widget Flutter
Widget Flutter sangat banyak. Namun, untuk pemula, ada beberapa widget penting yang wajib dipahami.
1. ๐ Text
Widget Text digunakan untuk menampilkan tulisan.
Contoh:
Text("Belajar Flutter")
Kita juga dapat mengatur tampilannya:
Text(
"Belajar Flutter",
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
),
)
Beberapa properti yang sering digunakan:
| Property | Fungsi |
|---|---|
fontSize | Mengatur ukuran teks |
fontWeight | Mengatur ketebalan teks |
color | Mengatur warna |
fontStyle | Mengatur gaya teks |
letterSpacing | Mengatur jarak antarhuruf |
textAlign | Mengatur posisi teks |
๐ 2. Icon
Widget Icon digunakan untuk menampilkan ikon.
Contoh:
Icon(Icons.home)
Flutter sudah menyediakan banyak ikon bawaan.
Contohnya:
Icons.home
Icons.search
Icons.person
Icons.favorite
Icons.settings
Icons.menu
Icons.notifications
Icons.delete
Icons.add
Icons.edit
๐ Icon Home
Icon(
Icons.home,
size: 30,
)
Untuk mengubah warna:
Icon(
Icons.home,
size: 30,
color: Colors.blue,
)
Ikon sering digunakan pada:
Navigation Bar
Tombol
Menu
Profil
Pengaturan
Dashboard
๐ผ️ 3. Image
Widget Image digunakan untuk menampilkan gambar.
Salah satu cara yang umum adalah menggunakan gambar dari folder assets.
Image.asset(
'assets/images/logo.png',
)
Jangan lupa mendaftarkan folder assets pada pubspec.yaml.
Contoh:
flutter:
assets:
- assets/images/
Kita juga dapat menggunakan gambar dari internet:
Image.network(
'https://example.com/image.jpg',
)
๐ฆ 4. Container
Container merupakan salah satu widget yang sangat sering digunakan.
Container dapat digunakan untuk mengatur:
Ukuran
Warna
Padding
Margin
Border
Border radius
Alignment
Contoh:
Container(
width: 200,
height: 100,
color: Colors.blue,
child: const Center(
child: Text("Flutter"),
),
)
Container sangat berguna ketika membuat kartu, tombol custom, banner, dan berbagai komponen UI.
๐ 5. Padding
Padding digunakan untuk memberikan jarak di dalam area widget.
Contoh:
Padding(
padding: const EdgeInsets.all(20),
child: const Text("Belajar Flutter"),
)
Jenis padding:
EdgeInsets.all(20)
Memberikan jarak ke semua sisi.
EdgeInsets.symmetric(
horizontal: 20,
)
Memberikan jarak kiri dan kanan.
EdgeInsets.only(
top: 20,
)
Memberikan jarak hanya pada bagian atas.
๐ 6. SizedBox
SizedBox digunakan untuk memberikan ukuran atau jarak.
Contoh jarak vertikal:
Column(
children: [
const Text("Nama"),
const SizedBox(height: 20),
const Text("Kelas"),
],
)
Contoh jarak horizontal:
Row(
children: [
const Icon(Icons.home),
const SizedBox(width: 10),
const Text("Home"),
],
)
SizedBox sangat sering digunakan untuk membuat tampilan lebih rapi.
↔️ 7. Row
Row digunakan untuk menyusun widget secara horizontal.
Contoh:
Row(
children: [
const Icon(Icons.home),
const SizedBox(width: 10),
const Text("Home"),
],
)
Hasilnya kurang lebih:
๐ Home
Row sering digunakan untuk:
Menu
Tombol
Icon + Text
Informasi pengguna
Navigation
↕️ 8. Column
Column digunakan untuk menyusun widget secara vertikal.
Contoh:
Column(
children: [
const Text("Nama"),
const Text("Ayu"),
const Text("XI RPL"),
],
)
Strukturnya:
Nama
Ayu
XI RPL
Row dan Column merupakan dua widget yang sangat penting dalam Flutter.
๐ฏ 9. Center
Widget Center digunakan untuk menempatkan widget di tengah.
Contoh:
Center(
child: Text("Hello Flutter"),
)
Center sering digunakan pada halaman kosong, halaman loading, maupun halaman sederhana.
๐ 10. ElevatedButton
ElevatedButton digunakan untuk membuat tombol.
Contoh:
ElevatedButton(
onPressed: () {
print("Tombol ditekan");
},
child: const Text("Klik Saya"),
)
Ketika tombol ditekan, kode dalam onPressed akan dijalankan.
๐ 11. TextField
TextField digunakan untuk menerima input dari pengguna.
Contoh:
TextField(
decoration: InputDecoration(
labelText: "Nama",
hintText: "Masukkan nama",
border: OutlineInputBorder(),
),
)
TextField dapat digunakan untuk:
Username
Password
Email
Pencarian
Komentar
Form pendaftaran
๐งพ 12. Card
Card digunakan untuk membuat tampilan berbentuk kartu.
Contoh:
Card(
child: Padding(
padding: const EdgeInsets.all(16),
child: const Text("Data Pengguna"),
),
)
Card cocok digunakan untuk:
Profil
Produk
Berita
Artikel
Dashboard
Informasi siswa
๐ 13. ListView
ListView digunakan untuk menampilkan daftar yang dapat di-scroll.
Contoh:
ListView(
children: const [
ListTile(
leading: Icon(Icons.home),
title: Text("Home"),
),
ListTile(
leading: Icon(Icons.person),
title: Text("Profile"),
),
ListTile(
leading: Icon(Icons.settings),
title: Text("Settings"),
),
],
)
Contoh penggunaannya:
๐ Home
๐ค Profile
⚙️ Settings
๐ Notifications
Jika daftar sangat panjang, ListView.builder lebih cocok digunakan.
๐ 14. ListView.builder
Widget ini digunakan untuk membuat daftar secara dinamis.
Contoh:
ListView.builder(
itemCount: 10,
itemBuilder: (context, index) {
return ListTile(
title: Text("Data ke-${index + 1}"),
);
},
)
Widget ini sangat berguna ketika data berasal dari:
Database
API
JSON
Firebase
Server
๐ฑ️ 15. GestureDetector
GestureDetector digunakan untuk mendeteksi berbagai interaksi pengguna.
Contohnya:
GestureDetector(
onTap: () {
print("Widget ditekan");
},
child: Container(
padding: const EdgeInsets.all(20),
color: Colors.blue,
child: const Text("Tekan Saya"),
),
)
GestureDetector dapat digunakan untuk mendeteksi:
Tap
Double tap
Long press
Drag
Pan
๐งฑ 16. Stack
Stack digunakan ketika kita ingin menumpuk widget.
Contoh:
Stack(
children: [
Container(
width: 200,
height: 200,
color: Colors.blue,
),
const Positioned(
bottom: 10,
right: 10,
child: Icon(Icons.favorite),
),
],
)
Stack sering digunakan untuk:
Badge notifikasi
Overlay
Foto profil
Tombol di atas gambar
Banner
๐ 17. Positioned
Positioned biasanya digunakan bersama Stack.
Contoh:
Stack(
children: [
Container(
width: 300,
height: 200,
),
const Positioned(
top: 10,
right: 10,
child: Icon(Icons.favorite),
),
],
)
Widget tersebut akan ditempatkan pada posisi tertentu di dalam Stack.
๐งญ 18. Scaffold
Scaffold merupakan kerangka dasar halaman aplikasi Material Design.
Contoh:
Scaffold(
appBar: AppBar(
title: const Text("Home"),
),
body: const Center(
child: Text("Halaman Home"),
),
)
Scaffold memiliki banyak bagian seperti:
Scaffold
├── AppBar
├── Body
├── Drawer
├── FloatingActionButton
└── BottomNavigationBar
๐ 19. AppBar
AppBar digunakan untuk membuat bagian atas aplikasi.
Contoh:
AppBar(
title: const Text("Home"),
actions: [
IconButton(
onPressed: () {},
icon: const Icon(Icons.search),
),
],
)
AppBar biasanya berisi:
Judul halaman
Tombol kembali
Search
Menu
Action button
๐ฝ 20. BottomNavigationBar / NavigationBar
Widget ini digunakan untuk navigasi antarhalaman.
Contoh sederhana:
NavigationBar(
destinations: const [
NavigationDestination(
icon: Icon(Icons.home),
label: "Home",
),
NavigationDestination(
icon: Icon(Icons.person),
label: "Profile",
),
],
)
Contohnya:
--------------------------------
๐ Home ๐ค Profile
--------------------------------
Navigation sangat umum ditemukan pada aplikasi modern.
๐ 21. CircularProgressIndicator
Widget ini digunakan untuk menunjukkan proses loading.
Contoh:
const CircularProgressIndicator()
Biasanya digunakan ketika aplikasi sedang:
Mengambil data dari API
Mengakses database
Mengunggah file
Memproses login
๐ฌ 22. AlertDialog
AlertDialog digunakan untuk menampilkan kotak dialog.
Contohnya:
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: const Text("Peringatan"),
content: const Text("Apakah kamu yakin?"),
actions: [
TextButton(
onPressed: () {
Navigator.pop(context);
},
child: const Text("Batal"),
),
TextButton(
onPressed: () {
Navigator.pop(context);
},
child: const Text("Ya"),
),
],
);
},
);
Dialog dapat digunakan untuk:
Konfirmasi
Peringatan
Informasi
Form sederhana
๐ง StatelessWidget dan StatefulWidget
Dalam Flutter, terdapat dua jenis widget yang sangat penting untuk dipahami:
StatelessWidget
StatelessWidget adalah widget yang tidak memiliki data yang berubah selama widget tersebut digunakan.
Contoh:
class MyText extends StatelessWidget {
const MyText({super.key});
@override
Widget build(BuildContext context) {
return const Text(
"Hello Flutter",
);
}
}
Cocok digunakan untuk tampilan yang relatif tetap.
Contohnya:
Logo
Judul
Icon
Komponen tampilan sederhana
๐ StatefulWidget
StatefulWidget digunakan ketika tampilan dapat berubah berdasarkan keadaan atau interaksi pengguna.
Contohnya:
Counter
Checkbox
Form
Toggle
Data yang berubah
Animasi
Contoh sederhana:
class CounterPage extends StatefulWidget {
const CounterPage({super.key});
@override
State<CounterPage> createState() => _CounterPageState();
}
class _CounterPageState extends State<CounterPage> {
int counter = 0;
void tambah() {
setState(() {
counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text(
"$counter",
style: const TextStyle(
fontSize: 30,
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: tambah,
child: const Icon(Icons.add),
),
);
}
}
Ketika tombol ditekan, nilai counter berubah.
⚖️ Perbedaan StatelessWidget dan StatefulWidget
| StatelessWidget | StatefulWidget |
|---|---|
| Tidak memiliki state yang berubah | Memiliki state yang dapat berubah |
| Lebih sederhana | Lebih kompleks |
| Cocok untuk UI statis | Cocok untuk UI interaktif |
Tidak menggunakan setState() | Dapat menggunakan setState() |
| Contoh: Text, Icon | Contoh: Counter, Form |
๐จ Widget untuk Mengatur Tampilan
Selain widget yang menampilkan konten, Flutter juga menyediakan widget untuk mengatur layout.
| Widget | Fungsi |
|---|---|
Container | Membuat area dan mengatur dekorasi |
Row | Susunan horizontal |
Column | Susunan vertikal |
Stack | Menumpuk widget |
Center | Menempatkan widget di tengah |
Padding | Memberikan jarak bagian dalam |
SizedBox | Memberikan ukuran/jarak |
Expanded | Mengisi ruang yang tersedia |
Flexible | Membuat widget fleksibel |
Align | Mengatur posisi widget |
๐ฏ Mengenal Expanded
Expanded digunakan agar widget mengisi ruang yang tersedia.
Contoh:
Row(
children: [
Expanded(
child: Container(
height: 100,
color: Colors.blue,
),
),
Expanded(
child: Container(
height: 100,
color: Colors.green,
),
),
],
)
Ruang horizontal akan dibagi antara kedua Container.
๐ฆ Mengenal Flexible
Flexible mirip dengan Expanded, tetapi lebih fleksibel dalam penggunaan ruang.
Contoh:
Row(
children: [
Flexible(
child: Text(
"Ini adalah teks yang cukup panjang.",
),
),
],
)
Widget ini membantu mencegah masalah tampilan ketika ukuran layar berbeda.
๐จ Decoration pada Container
Container dapat dibuat lebih menarik menggunakan BoxDecoration.
Contoh:
Container(
width: 200,
height: 100,
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(20),
boxShadow: const [
BoxShadow(
blurRadius: 10,
spreadRadius: 2,
),
],
),
child: const Center(
child: Text("Flutter"),
),
)
Kita dapat mengatur:
Warna
Border
Radius
Shadow
Gradient
๐ Membuat Gradient
Contoh gradient:
Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: [
Colors.blue,
Colors.purple,
],
),
),
)
Gradient dapat membuat tampilan aplikasi menjadi lebih modern.
๐งฉ Widget Composition
Salah satu kekuatan Flutter adalah Widget Composition.
Daripada membuat satu widget yang sangat besar, kita dapat memecahnya menjadi beberapa widget kecil.
Misalnya halaman profil:
ProfilePage
│
├── ProfileHeader
│ ├── CircleAvatar
│ └── Text
│
├── ProfileInformation
│ ├── Text
│ ├── Text
│ └── Text
│
└── ProfileButton
└── ElevatedButton
Dengan cara ini, kode menjadi:
Lebih rapi
Lebih mudah dibaca
Lebih mudah diperbaiki
Lebih mudah digunakan kembali
๐ก Contoh Membuat Halaman Profil Sederhana
Berikut contoh kombinasi beberapa widget:
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text("Profil"),
),
body: Padding(
padding: const EdgeInsets.all(20),
child: Column(
children: [
const CircleAvatar(
radius: 50,
child: Icon(
Icons.person,
size: 50,
),
),
const SizedBox(height: 20),
const Text(
"Ayu Setia Lestari",
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
),
),
const SizedBox(height: 8),
const Text(
"XI RPL 2",
style: TextStyle(
fontSize: 16,
),
),
const SizedBox(height: 30),
SizedBox(
width: double.infinity,
child: ElevatedButton(
onPressed: () {},
child: const Text("Edit Profil"),
),
),
],
),
),
),
);
}
}
Dari contoh tersebut kita menggunakan beberapa widget sekaligus:
MaterialApp
└── Scaffold
├── AppBar
└── Padding
└── Column
├── CircleAvatar
├── SizedBox
├── Text
├── SizedBox
├── Text
├── SizedBox
└── ElevatedButton
Inilah konsep dasar Widget Tree dalam Flutter.
๐ฅ Mengapa Widget Sangat Penting di Flutter?
Widget menjadi sangat penting karena hampir seluruh aplikasi Flutter dibangun menggunakan widget.
Dengan memahami widget, kita dapat:
✅ Membuat UI dengan lebih cepat
✅ Mengatur layout aplikasi
✅ Membuat aplikasi responsif
✅ Membuat komponen yang dapat digunakan kembali
✅ Membuat aplikasi interaktif
✅ Menghubungkan UI dengan data
✅ Membuat desain aplikasi yang modern
๐ ️ Tips Belajar Widget Flutter untuk Pemula
Jangan mencoba menghafalkan semua widget sekaligus.
Mulailah dari widget yang paling sering digunakan.
Level 1 — Dasar
Pelajari:
Text
Icon
Image
Container
Center
Padding
SizedBox
Level 2 — Layout
Kemudian pelajari:
Row
Column
Expanded
Flexible
Stack
Positioned
Level 3 — Interaksi
Selanjutnya:
ElevatedButton
TextButton
IconButton
TextField
Checkbox
Switch
GestureDetector
Level 4 — Struktur Aplikasi
Setelah itu:
MaterialApp
Scaffold
AppBar
Drawer
NavigationBar
ListView
GridView
Level 5 — State
Kemudian pelajari:
StatelessWidget
StatefulWidget
setState()
Setelah memahami dasar-dasar tersebut, kamu dapat mulai mempelajari state management, API, database, Firebase, dan arsitektur aplikasi.
๐ง Kesalahan yang Sering Dilakukan Pemula
1. Terlalu Banyak Widget dalam Satu File
Jika satu file berisi ratusan bahkan ribuan baris kode, aplikasi akan sulit dirawat.
Solusinya adalah membuat widget terpisah.
2. Tidak Memahami Row dan Column
Row dan Column adalah dasar layout Flutter.
Jika belum memahami keduanya, membuat UI yang kompleks akan terasa sulit.
3. Menggunakan Container untuk Semua Hal
Container memang sangat berguna, tetapi bukan berarti semua masalah layout harus diselesaikan dengan Container.
Gunakan widget sesuai kebutuhan.
Contohnya:
Jarak →
SizedBoxPosisi →
AlignSusunan horizontal →
RowSusunan vertikal →
ColumnJarak dalam →
Padding
4. Tidak Memperhatikan Ukuran Layar
Aplikasi harus dapat digunakan pada berbagai ukuran layar.
Hindari terlalu banyak menggunakan ukuran tetap seperti:
width: 500
Gunakan widget seperti:
Expanded()
atau:
Flexible()
sesuai kebutuhan.
๐ Cheat Sheet Widget Flutter
| Kebutuhan | Widget |
|---|---|
| Menampilkan teks | Text |
| Menampilkan ikon | Icon |
| Menampilkan gambar | Image |
| Membuat kotak | Container |
| Menyusun horizontal | Row |
| Menyusun vertikal | Column |
| Menempatkan di tengah | Center |
| Memberi jarak | SizedBox |
| Memberi padding | Padding |
| Membuat tombol | ElevatedButton |
| Input teks | TextField |
| Membuat kartu | Card |
| Membuat daftar | ListView |
| Daftar dinamis | ListView.builder |
| Loading | CircularProgressIndicator |
| Dialog | AlertDialog |
| Navigasi | NavigationBar |
| Menumpuk widget | Stack |
| Posisi dalam Stack | Positioned |
| Layout fleksibel | Expanded / Flexible |
| Mendeteksi sentuhan | GestureDetector |
๐ Kesimpulan
Widget merupakan fondasi utama dalam Flutter. Hampir semua tampilan aplikasi Flutter dibangun menggunakan widget.
Mulai dari:
Text
Icon
Image
hingga:
Container
Row
Column
Stack
ListView
Scaffold
NavigationBar
semuanya dapat dikombinasikan untuk membangun aplikasi yang menarik.
Hal terpenting bukan menghafalkan seluruh widget yang tersedia, tetapi memahami fungsi setiap widget dan mengetahui kapan harus menggunakannya.
Jika kamu baru mulai belajar Flutter, fokuslah terlebih dahulu pada:
Text → Container → Row → Column → Padding → SizedBox → Button → TextField → ListView → Scaffold → StatefulWidget
Setelah menguasai dasar tersebut, kamu akan lebih mudah mempelajari pembuatan aplikasi yang lebih kompleks.
๐ Dari Widget Menuju Aplikasi Nyata
Setelah memahami widget, perjalanan belajar Flutter belum selesai.
Kamu bisa melanjutkan ke:
Widget → Layout → Navigation → Form → State Management → API → Database → Authentication → Deployment
Dari kombinasi tersebut, kamu sudah bisa mulai membangun berbagai aplikasi seperti:
๐ฑ Aplikasi kasir
๐ Aplikasi perpustakaan
๐ Aplikasi toko online
๐ Aplikasi catatan
๐ซ Aplikasi sekolah
๐ฐ Aplikasi keuangan
๐ Aplikasi kesehatan
๐ฌ Aplikasi chat
Jadi, jangan hanya menjadi pengguna aplikasi.
Mulailah belajar membuat aplikasi sendiri dengan Flutter! ๐
"Setiap aplikasi besar dimulai dari widget-widget kecil yang disusun dengan baik."

Komentar
Posting Komentar