๐Ÿ“ฑ
BAB 4
</>
โ—†
Widget
Dart
Mobile Development โ€ข Flutter & Dart

BAB 4 โ€” FLUTTER FUNDAMENTAL

Belajar Membangun Aplikasi Mobile Pertamamu

Kelas 10  โ€ข  Semester 1  โ€ข  Buku Digital Interaktif

Lanjutan dari BAB 1 (Mobile Dev), BAB 2 (Dasar Dart) & BAB 3 (OOP)

Peta Konsep

Perjalanan Belajarmu

Kamu sudah melewati 3 bab. Sekarang semuanya bersatu menjadi aplikasi nyata.

๐ŸŒ
BAB 1
Pengenalan Mobile
โžœ
๐ŸŽฏ
BAB 2
Dasar Dart
โžœ
๐Ÿงฉ
BAB 3
OOP
โžœ
๐Ÿ“ฑ
BAB 4 โ€” SEKARANG
Flutter Fundamental

Daftar Materi BAB 4

๐Ÿงฉ Konsep โ€” Pengenalan

Apa itu Flutter?

๐Ÿงฑ Analogi: Flutter itu seperti LEGO

AppBar
Text
Image
Button

Perhatikan balok-balok tersusun terus-menerus. Di Flutter, kamu membangun aplikasi dengan menumpuk “bata” bernama widget โ€” sama seperti menyusun LEGO menjadi bangunan.

Penjelasan Teknis

  • Flutter adalah framework buatan Google untuk membuat aplikasi.
  • Satu kode bisa jalan di Android, iOS, Web, & Desktop.
  • Menggunakan bahasa Dart (yang sudah kamu pelajari di BAB 2 & 3).
  • UI dibangun dari widget โ€” potongan kecil yang disusun jadi tampilan.

๐Ÿ’ก Kenapa Flutter?

Cepat (Hot Reload), tampilan cantik bawaan (Material Design), dan satu kode untuk banyak platform.

๐Ÿ“ Hubungan Dart & Flutter

๐ŸŽฏ
Dart
Bahasa Pemrograman
+
๐Ÿ’™
Flutter
Framework
=
๐Ÿ“ฑ
Aplikasi
Yang Berjalan!
Penjelasan Dart digunakan sebagai bahasa untuk menulis kode, sedangkan Flutter menyediakan tools & komponen untuk membangun tampilan & fitur aplikasi.
๐Ÿ”„ Transformasi โ€” Terminal ke Aplikasi

Dari Tulisan ke Tampilan

Sebelumnya kita menulis Dart di terminal. Sekarang, kode yang sama bisa menjadi aplikasi nyata!

Sebelumnya (Terminal)
void main() {
  print('Hello World');
}

> Hello World
Output berupa teks di terminal
Flutter โžก๏ธ
Sekarang (Aplikasi)
๐Ÿ“ฑ MyApp
๐ŸŽ‰
Hello World!
Tampil di layar HP
Output berupa tampilan visual

๐Ÿค” Kenapa Kita Belajar Flutter?

Program yang kita buat sebelumnya:

๐Ÿ“‹ Program Sebelumnya

  • Kalkulator sederhana
  • Program kasir
  • Data siswa
  • Sistem kendaraan
INPUT โ†“ PROSES โ†“ OUTPUT
Hasilnya di terminal

๐Ÿ“ฑ Dengan Flutter

  • Halaman profil
  • Card informasi
  • Tombol & gambar
  • Menu navigasi
INPUT โ†“ PROSES โ†“ APLIKASI
Hasilnya berupa aplikasi
Kesimpulan Flutter membantu kita membawa program yang sebelumnya hanya berjalan di terminal menjadi aplikasi yang memiliki tampilan dan dapat digunakan oleh pengguna.
๐Ÿ—บ๏ธ Roadmap โ€” Perjalanan Kita

Dari Menulis Program ke Membangun Aplikasi

Pada BAB ini, kita berpindah dari menulis program menjadi membangun aplikasi.

๐Ÿ“
Mengenal Flutter
Apa itu Flutter & kenapa penting
๐Ÿ“‚
Membuat Project
Buat project Flutter pertama
โ–ถ๏ธ
Menjalankan Aplikasi
Jalankan di emulator / HP
๐Ÿ—‚๏ธ
Memahami Struktur
Kenali isi project Flutter
๐Ÿšช
Memahami main.dart
Titik masuk aplikasi
๐ŸŽจ
Membuat Tampilan
Bangun UI dengan widget
๐Ÿš€
Mengembangkan Aplikasi
Fitur & interaksi pengguna

โžก๏ธ Yang Akan Kita Pelajari

  • Membuat project Flutter pertama
  • Menjalankan aplikasi di HP / emulator
  • Memahami struktur folder & file
  • Mengenal main.dart sebagai titik masuk
  • Membangun tampilan pertama dengan widget

๐Ÿ’ก Yang Perlu Diingat

Kemampuan Dart yang telah dipelajari di BAB 2 & 3 tetap digunakan. Perbedaannya: sekarang kita menggunakan Flutter untuk membangun interface dan pengalaman pengguna.

Tujuan utama: tidak hanya membuat tampilan menarik, tapi juga memahami bagaimana kode menjadi aplikasi yang benar-benar berjalan di perangkat.

๐Ÿ“‚ Bagian 3 โ€” Project Flutter Pertama

Membuat Project Flutter

1
Flutter: New Project
Buka VS Code > Command Palette
โ†“
2
Application
Pilih tipe project
โ†“
3
Pilih Lokasi
Tentukan folder penyimpanan
โ†“
4
Beri Nama Project
Gunakan huruf kecil + underscore
โ†“
5
Create!
Project berhasil dibuat ๐ŸŽ‰

โœ… Contoh Nama yang Benar

belajar_flutter
aplikasi_pertama
kasir_sederhana
data_siswa
  • Huruf kecil semua
  • Gunakan _ (underscore) untuk memisahkan kata
  • Angka jika diperlukan

โŒ Contoh Nama yang Salah

Belajar Flutter   // ada spasi!
BelajarFlutter    // huruf besar!
belajar-flutter   // pakai strip!
belajar flutter   // spasi lagi!
Tips Hindari spasi & karakter khusus dalam nama project!
๐Ÿ—‚๏ธ Bagian 4 โ€” Memahami Project

Struktur Project Flutter

Setelah project dibuat, kita akan melihat banyak folder. Jangan panik! Kita akan memahami satu per satu.

๐Ÿ—‚๏ธ Analogi: Lemari Berlaci

๐Ÿ“ my_project/
๐Ÿ“ lib/ โญ Fokus Utama
๐Ÿ“„ main.dart
๐Ÿ“ android/ Android
๐Ÿ“ ios/ iOS
๐Ÿ“ test/ Testing
๐Ÿ“„ pubspec.yaml Config
๐Ÿ“„ README.md

Tiap “laci” punya isi sendiri. Yang paling sering kamu buka adalah lib/main.dart.

๐Ÿ“ Folder lib/

Tempat utama kamu menulis kode aplikasi. Sebagian besar waktu kamu akan dihabiskan di sini.

lib/
โ”œโ”€โ”€ main.dart       โญ file utama
โ”œโ”€โ”€ pages/          (nanti)
โ”œโ”€โ”€ widgets/        (nanti)
โ”œโ”€โ”€ models/         (nanti)
โ””โ”€โ”€ services/       (nanti)
Fokus Untuk sekarang, cukup fokus ke lib/main.dart!

๐Ÿ“ Folder android/

Berisi file & konfigurasi untuk aplikasi Android. Flutter tetap membutuhkan konfigurasi platform saat dijalankan di Android.

Catatan Untuk tahap awal, tidak perlu mengubah isi folder ini.

๐Ÿ“ Folder ios/

Seperti android/, tapi untuk kebutuhan aplikasi di perangkat Apple (iPhone/iPad).

Catatan android/ = Android  |  ios/ = iOS

๐Ÿ“ Folder test/

Untuk menyimpan kode pengujian (testing). Memastikan program berjalan sesuai harapan.

  • Fitur berjalan dengan benar
  • Function menghasilkan output sesuai
  • Tampilan muncul dengan baik
Catatan Materi testing dipelajari lebih lanjut setelah memahami dasar Flutter.

๐Ÿ“„ File pubspec.yaml

File penting untuk mengatur kebutuhan project:

  • Nama project
  • Dependencies / package
  • Assets (gambar, font)
Fungsi Ketika ingin menambahkan package atau asset, edit file ini!

๐Ÿ“„ File README.md

File informasi project: nama, deskripsi, tujuan, cara menjalankan.

Catatan Berguna saat project dikerjakan bersama orang lain.

โ–ถ๏ธ Menjalankan Project Pertama

๐Ÿ“‚
Project Flutter
โ†“
๐Ÿ“–
Membaca Kode
โ†“
โš™๏ธ
Memproses
โ†“
๐Ÿ”จ
Membangun
โ†“
๐Ÿ“ฑ
Aplikasi Berjalan!

Klik โ–ถ Run atau ketik flutter run di terminal. Pada pertama kali, proses mungkin membutuhkan waktu lebih lama.

๐ŸŽฏ Kesimpulan Struktur Project

PROJECT
โ†“
lib/
โ†“
main.dart โญ

Jangan coba memahami semua folder sekaligus. Fokus ke lib/main.dart dulu!

Prinsipnya: tidak semua yang ada di project harus dipahami dalam satu hari.

๐Ÿšช Bagian 5 โ€” Masuk ke Aplikasi

main.dart โ€” Titik Awal Aplikasi

๐Ÿ“
Project
โ†’
๐Ÿ“‚
lib/
โ†’
๐Ÿ“„
main.dart
โ†’
โšก
main()
โ†’
โ–ถ๏ธ
runApp()
โ†’
๐Ÿ“ฑ
Aplikasi Berjalan!

๐Ÿšช Analogi: Pintu Masuk Rumah

๐Ÿšถ

Semua tamu masuk lewat satu pintu utama. Begitu juga aplikasi Flutter: selalu mulai dari fungsi main() di file main.dart.

Analogi main() = pintu utama โ†’ runApp() = menyalakan listrik โ†’ rumah menyala!

Penjelasan Detail

1
main.dart โ€” File utama, titik masuk seluruh aplikasi. Flutter selalu mencari file ini pertama kali.
2
main() โ€” Fungsi pertama yang dijalankan. Seperti pintu masuk rumah.
3
runApp() โ€” “Menyalakan” aplikasi & menampilkan widget root yang diberikan.
4
import โ€” Baris di atas mengambil paket Material milik Flutter (widget, tema, dsb).
๐Ÿ” Detail โ€” Alur Eksekusi

Bagaimana Aplikasi Mulai Berjalan?

Mari kita urutkan langkah demi langkah apa yang terjadi saat aplikasi dijalankan.

1
Flutter membuka main.dart
Sistem mencari file utama di folder lib/
2
Flutter menjalankan main()
Fungsi pertama yang dieksekusi
3
main() memanggil runApp()
Menjalankan widget root yang diberikan
4
runApp() menerima MyApp()
Flutter mulai membangun widget tree
5
Flutter membangun & menampilkan tampilan
๐Ÿ“ฑ Aplikasi muncul di layar!
import 'package:flutter/material.dart';
//         โ†‘ mengambil paket Material

void main() {
//  โ†‘ titik awal eksekusi
  runApp(const MyApp());
// โ†‘ menjalankan aplikasi
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        body: Center(child: Text('Halo Flutter!')),
      ),
    );
  }
}

Penjelasan per Baris

import ... Mengambil paket Material (widget, tema, dsb)
void main() Fungsi pertama yang dijalankan Flutter
runApp() Menyalakan aplikasi & menampilkan widget
MyApp() Widget root โ€” seluruh aplikasi ada di dalamnya
MaterialApp() Fondasi: tema, judul, halaman awal
Scaffold() Kerangka layar (AppBar, Body, FAB)
Hasil di Layar HP Tulisan “Halo Flutter!” muncul di tengah layar ๐ŸŽ‰

โœ… Kesimpulan

PROJECT
โ†“
lib/
โ†“
main.dart
โ†“
main()
โ†“
runApp()
โ†“
APLIKASI BERJALAN ๐Ÿ“ฑ

Setelah memahami alur ini, kita siap mempelajari bagaimana Flutter membangun tampilan aplikasi.

๐Ÿงฑ Fondasi Flutter โ€” Modul Widget (1/10)

Apa Itu Widget? โ€” Blok Pembangun Tampilan

Di Flutter, berlaku satu prinsip utama yang sangat terkenal: “Everything is a Widget” (Semuanya adalah Widget!).

๐Ÿ“ฑ 2D Widget Inspector

๐Ÿ“ฑ Profil Siswa AppBar
Container
๐Ÿง‘โ€๐Ÿ’ป CircleAvatar
Abiy Ahmad Text
Siswa Kelas 11 โ€ข Flutter Text
โœ‰๏ธ Hubungi Siswa ElevatedButton

๐Ÿ’ก Klik tombol “๐Ÿ” Sorot Widget” di atas untuk melihat bagaimana setiap bagian layar dipecah menjadi widget-widget mandiri!

Konsep Dasar untuk Pemula

1
Blok Penyusun Tampilan: Seperti balok mainan (LEGO) atau batu bata rumah. Layar aplikasi bukanlah satu gambar utuh, melainkan tersusun dari ratusan blok kecil bernama Widget.
2
Semua Elemen adalah Widget: Teks judul, gambar avatar, tombol klik, warna latar belakang, sampai jarak spasi antar elemenโ€”semuanya adalah Widget di Flutter!

๐ŸŽฏ Target Pemahaman Kamu

Setelah modul ini selesai, kamu bukan cuma bisa menjawab “Widget adalah komponen UI”, tapi mampu menjelaskan:

“Widget adalah objek/class di Flutter yang mendeskripsikan bagian tertentu dari tampilan aplikasi. Widget dapat disusun dengan widget lain membentuk widget tree. Ada widget yang menampilkan sesuatu dan ada widget yang mengatur posisi/struktur widget lain.”
Tips untuk Guru Ajak siswa memperhatikan aplikasi HP favorit mereka (WhatsApp/IG) dan minta mereka menebak: mana teks, mana tombol, dan mana wadah pembungkusnya!
๐Ÿงฑ Filosofi Widget (3/10)

2. Widget Itu Seperti “Instruksi untuk Membentuk UI”

Melangkah lebih dalam daripada sekadar analogi mainan: Widget adalah Deskripsi UI (Resep Instruksi), bukan benda mati!

๐Ÿณ Analogi Resep: Koki & Cetakan

Langkah 1: Kode Kita
Text("Assalamu'alaikum")
Instruksi: "Tolong siapkan teks ini"
โฌ‡๏ธ
Langkah 2: Deskripsi UI
๐Ÿ“‹ Konfigurasi & Posisi
Dibungkus oleh Center di tengah layar
โฌ‡๏ธ
Langkah 3: Flutter Engine
๐Ÿ’™ Mesin Pembangun Flutter
Membaca deskripsi & menghitung piksel
โฌ‡๏ธ
Langkah 4: Tampilan Nyata
๐Ÿ“ฑ Piksel Muncul di Layar HP
Tulisan tampil indah di tengah layar!

Mengapa Pemahaman Ini Sangat Penting?

Jangan Katakan:

โŒ “Text adalah tulisan.”

Katakanlah:

โœ… “Text adalah Widget yang mendeskripsikan bahwa kita ingin menampilkan sebuah teks.”

Center(
  child: Text("Assalamu'alaikum"),
)
1
Kita memberikan deskripsi: Center mendeskripsikan posisi tengah, Text mendeskripsikan teks apa yang ingin dimunculkan.
2
Flutter yang membangun: Secara konsep resmi Flutter, Widget mendeskripsikan seperti apa bagian UI berdasarkan konfigurasi dan state saat itu.
Kutipan Konsep Widget bukanlah piksel yang digambar langsung ke monitor, melainkan instruksi tertulis tentang apa yang harus digambar.
๐Ÿงฑ Struktur Hubungan (4/10)

3. Widget Bisa Berisi Widget Lain (Parent & Child)

Bagian yang wajib dikuasai kuat sebelum kita masuk ke pembahasan method build().

Kasus 1: Single Child (Satu Anak)

Center → Text

PARENT Center
โฌ‡๏ธ child:
CHILD Text("Halo Flutter")
Center(
  child: Text("Halo Flutter"),
)
// Center = parent (induk)
// Text   = child  (anak)

Properti child hanya menerima 1 widget anak.

Kasus 2: Multiple Children (Banyak Anak)

Column → [Text, Text, Icon]

PARENT Column
โฌ‡๏ธ children: [ ... ]
Text("Nama")
Text("Abiy")
Icon(school)
Column(
  children: [
    Text("Nama"),
    Text("Abiy"),
    Icon(Icons.school),
  ],
)
// Column   = parent
// children = List berisi 3 widget anak

Properti children menggunakan kurung siku [...] (List di Dart/BAB 2).

Prinsip Hierarki Siswa mulai memahami: Widget dapat menjadi parent dan dapat memiliki child. Flutter menyusun widget secara hierarkis sampai membentuk Widget Tree.
๐Ÿงฑ Tantangan Kelas (5/10)

4. Dari Widget Sederhana Menjadi Tampilan Kompleks

๐ŸŽฏ Tantangan Berpikir untuk Siswa & Guru!

โ“ Target Tampilan

๐Ÿ“ฑ Profil Akun
๐Ÿ‘ค
Abiy Ahmad Mobile Developer
Edit Profil

Tanya Siswa: “Widget apa saja yang kira-kira dibutuhkan untuk membangun tampilan di atas?”

Solusi Susunan Widget (Widget Tree)

๐Ÿ”’ Tekan tombol “๐Ÿ’ก Buka Solusi Widget” untuk melihat rahasia susunannya!

๐Ÿ’ก Cara Berpikir Programmer Flutter

“Tampilan bukan satu benda besar yang digambar sekaligus.”

Tampilan selalu dibangun dari banyak Widget kecil yang saling melengkapi dan bekerja sama membentuk satu kesatuan.

๐Ÿงฑ Wadah & Jarak (6/10)

5. Ada Widget yang Menjadi “Wadah”

Mengenal peran Container dan Padding sebelum kita masuk ke struktur layar yang lebih besar.

๐Ÿ“ฆ Container: Seperti Kardus / Kotak Wadah

Wadah serbaguna. Isinya bisa widget lain, dan bisa diberi warna latar, border, sudut tumpul, serta ukuran.

Container(
  color: Colors.blue,
  child: Text("Halo"),
)

๐Ÿ“ Padding: Memberi Jarak Aman

Padding tidak menampilkan tulisan atau gambar. Dia murni memberi ruang kosong di sekitar child-nya!

Text("Halo")

7 Peran Widget yang Mudah Dihafal Siswa

Widget Aksi / Peran Analogi Sederhana
Text Menampilkan Tulisan di atas kertas
Icon Menampilkan Stiker simbol visual
Container Membungkus Kardus pembungkus barang
Padding Memberi Jarak Bantalan bubble wrap
Center Memposisikan Titik bidik tengah sasaran
Column Menyusun Vertikal Tumpukan buku ke bawah
Row Menyusun Horizontal Barisan tentara ke samping
Pola Pikir Siswa mulai melihat dengan jelas: ada widget pembawa konten, ada widget pembungkus, dan ada widget penentu tata letak.
๐Ÿงฑ Jembatan OOP BAB 3 (7/10)

6. Widget Itu Sebenarnya Class Dart!

Kamu sudah belajar Dart OOP di BAB 3. Sekarang manfaatkan pengetahuan tersebut!

๐ŸŒ‰ Jembatan: OOP ke Flutter

๐Ÿงฑ
Flutter Widget
Komponen tampilan yang kita pakai
โฌ‡๏ธ dibuat dari
๐Ÿ“ฆ
Class Dart
Cetak biru / blueprint OOP (BAB 3)
โฌ‡๏ธ diinstansiasi jadi
๐ŸŽฏ
Object (Instance)
Objek nyata yang diproses Flutter

๐ŸŽ“ Tanya Siswa: “Kalau Widget adalah bagian dari Flutter, sebenarnya dibuat menggunakan apa?” → Class Dart!

Bedah Kode Widget Pertama

class MyWidget extends StatelessWidget {
  // 1. class MyWidget          --> Membuat Class baru
  // 2. extends StatelessWidget --> Pewarisan / Inheritance (BAB 3!)
  
  @override
  Widget build(BuildContext context) {
    return const Text("Halo!");
  }
}
1
class MyWidget: Kita mendeklarasikan class baru. Sama persis seperti di BAB 3!
2
extends StatelessWidget: Kita mewarisi sifat-sifat dasar widget milik Flutter. Ini materi Inheritance (Pewarisan).
3
@override: Kita menimpa method bawaan untuk menentukan isi widget kita. Ini konsep Polymorphism dari BAB 3!
Dokumentasi Flutter Widget merupakan class/objek yang digunakan untuk mendeskripsikan konfigurasi bagian UI.
๐Ÿงฑ Eksperimen Widget Sendiri (8/10)

7. Contoh: Kita Membuat Widget Sendiri

Inilah jembatan terbaik yang akan membuatmu memahami fungsi method build() secara alami.

Contoh: Widget Greeting

class Greeting extends StatelessWidget {
  const Greeting({super.key});

  @override
  Widget build(BuildContext context) {
    return const Text("Halo!");
  }
}

๐Ÿค” Tanya Siswa:

“Apa yang sebenarnya dilakukan oleh Widget Greeting di atas?”

Bukan sekadar kode mati, perhatikan alur logikanya di kolom sebelah kanan →

Alur Logika Greeting

1
Greeting adalah sebuah Widget (Class buatan kita).
2
Greeting memiliki method build() di dalamnya.
3
Method build() tersebut mengembalikan (return) widget Text("Halo!").
4
Flutter membaca return tersebut, lalu menggambar tulisan “Halo!” ke layar HP! ๐ŸŽ‰

๐Ÿ’ก Momen “Aha!” Siswa

Bukan: “Sekarang kita belajar method build() karena memang ada di buku.”

Tetapi: “Ternyata Widget buatan kita harus menjelaskan kepada Flutter: 'Saya mau menampilkan apa sih?' Dan di sinilah build() berperan!”

๐Ÿณ Konsep โ€” build()

Build Method โ€” Cara Widget Menggambar Diri

๐Ÿณ Analogi: Resep Masakan

๐Ÿ“– โžœ ๐Ÿฒโ™จ๏ธ

Setiap kali Flutter mau “memasak” tampilan, ia membaca resep di dalam build(). Resep ini menentukan widget apa yang muncul.

Penjelasan Teknis

  • build() adalah method yang mengembalikan widget.
  • Dipanggil otomatis oleh Flutter saat layar perlu digambar.
  • Parameter BuildContext = info posisi widget di pohon.
  • Ini contoh @override & polymorphism dari BAB 3!
@override
Widget build(BuildContext context) {
  // build() mengembalikan widget yang akan digambar di layar
  return const Text('Aku digambar oleh build()');
}
Hasil di Layar HP Tulisan "Aku digambar oleh build()" tampil di layar.
๐Ÿ—๏ธ Widget Fondasi โ€” MaterialApp

MaterialApp โ€” Fondasi Aplikasi

๐Ÿงฑ Analogi: Pondasi Rumah

FONDASI
๐Ÿ 

Tanpa pondasi, tidak ada yang bisa berdiri. MaterialApp adalah pondasi yang menyiapkan tema, judul, & navigasi untuk seluruh aplikasi.

Penjelasan Teknis

  • title โ€” nama aplikasi (terlihat saat multitasking).
  • theme โ€” warna & gaya seluruh aplikasi.
  • home โ€” halaman pertama yang ditampilkan.
  • Membungkus seluruh widget lain di dalamnya.
MaterialApp(
  title: 'Aplikasi Pertamaku',
  theme: ThemeData(primarySwatch: Colors.deepPurple),
  home: const HalamanUtama(), // halaman pembuka
);
๐Ÿ—๏ธ Widget Kerangka โ€” Scaffold

Scaffold โ€” Kerangka Layar

๐Ÿ—๏ธ Analogi: Rangka Besi Bangunan

AppBar Body FAB

Rangka besi menyediakan tempat untuk menaruh AppBar (atas), Body (tengah), dan FloatingActionButton (sudut). Itulah tugas Scaffold.

Penjelasan Teknis

  • appBar โ€” bilah judul di bagian atas.
  • body โ€” isi utama layar (paling besar).
  • floatingActionButton โ€” tombol mengambang.
  • Memberi struktur Material Design standar.
Scaffold(
  appBar: AppBar(title: const Text('Beranda')),
  body: const Center(child: Text('Isi layar di sini')),
  floatingActionButton: FloatingActionButton(
    onPressed: () {},
    child: const Icon(Icons.add),
  ),
);
๐Ÿ” Bagian Scaffold โ€” AppBar

AppBar โ€” Bilah Judul

๐Ÿชง Analogi: Papan Nama Toko

โ˜… TOKO SAHIL โ˜…

Papan nama selalu terpasang di atas pintu dan memberi tahu pengunjung di mana mereka berada. AppBar melakukan hal yang sama di aplikasi.

Penjelasan Teknis

  • title โ€” teks judul di AppBar.
  • backgroundColor โ€” warna latar AppBar.
  • actions โ€” daftar tombol di kanan (ikon menu, share, dll).
AppBar(
  title: const Text('Biodataku'),
  backgroundColor: Colors.deepPurple,
  actions: [
    IconButton(onPressed: () {}, icon: const Icon(Icons.share)),
  ],
);
Hasil di Layar HP Bilah ungu di atas bertuliskan "Biodataku" + ikon share di kanan.
๐Ÿ›‹๏ธ Bagian Scaffold โ€” Body

Body โ€” Isi Utama Layar

๐Ÿ›‹๏ธ Analogi: Ruangan dalam Rumah

๐Ÿ›‹๏ธ๐Ÿช‘ ๐Ÿชด๐Ÿ–ผ๏ธ

Ruangan kosong diisi furnitur satu per satu. Begitu juga Body: tempat kamu menaruh semua widget (teks, gambar, tombol) yang ingin ditampilkan.

Penjelasan Teknis

  • body menampung satu widget utama.
  • Pakai Column untuk menyusun widget vertikal.
  • Pakai Row untuk menyusun widget horizontal.
  • Center menaruh isi di tengah layar.
body: Column(
  mainAxisAlignment: MainAxisAlignment.center,
  children: const [
    Icon(Icons.person, size: 80),
    Text('Nama: Sahil'),
    Text('Kelas: 10 SMA'),
  ],
);
๐Ÿ”˜ Bagian Scaffold โ€” FAB

FloatingActionButton โ€” Tombol Mengambang

๐Ÿ”” Analogi: Tombol Bel Rumah

๐Ÿ””

Tombol bel selalu mengambang di sudut dan mudah dijangkau. FAB sama: tombol bundar untuk aksi paling penting. Klik bel untuk melihat efeknya!

Penjelasan Teknis

  • onPressed โ€” kode yang jalan saat ditekan.
  • child โ€” isi tombol, biasanya sebuah Icon.
  • tooltip โ€” teks bantuan saat ditahan.
Console Output Klik bel di kiri untuk memicu onPressed ▸
floatingActionButton: FloatingActionButton(
  onPressed: () {
    print('Tombol ditekan!');
  },
  tooltip: 'Tambah',
  child: const Icon(Icons.add),
);
โšก Perbandingan

Hot Reload vs Hot Restart

Dua “jurus” ajaib Flutter yang membuat ngoding terasa instan.

๐Ÿ”ฅ Hot Reload

๐Ÿง‘โ€๐Ÿ’ป

“Ganti baju tanpa keluar kamar.”

โœ” State DIPERTAHANKAN

๐Ÿ”„ Hot Restart

๐Ÿšฟ

“Mandi dari awal โ€” semua direset.”

โœ˜ State DIRESET
AspekHot ReloadHot Restart
KecepatanSangat cepat (< 1 detik)Lebih lambat (beberapa detik)
State aplikasiDipertahankanHilang / kembali awal
Kapan dipakaiUbah tampilan/UIUbah main() / state awal
Shortcut umumTombol โšก / rTombol ๐Ÿ”„ / R
๐Ÿ—บ๏ธ Alur Eksekusi

Flowchart Alur Eksekusi Flutter

Inilah urutan yang dijalankan Flutter dari awal sampai layar tampil. Klik “Putar Ulang” untuk melihat animasinya.

main() runApp() MaterialApp Scaffold Bagian Layar AppBar Body FAB
Inti Alur main() memanggil runApp() โ†’ membangun MaterialApp โ†’ Scaffold โ†’ lalu menggambar AppBar, Body, & FAB menjadi Widget Tree.
๐Ÿš€ Mini Project โ€” Preview

Aplikasi Biodata Sederhana

Sekarang kita gabungkan SEMUA materi tadi menjadi satu aplikasi nyata.

๐Ÿ“ฑ Tampilan Akhir

๐Ÿ‘ค Biodata Saya
๐Ÿง‘โ€๐ŸŽ“
Sahil Pratama
Kelas 10 SMA โ€ข Mobile Dev
๐Ÿ’ป Coding๐ŸŽฎ Game๐ŸŽต Musik
โœ๏ธ

Fitur yang Dibangun

  • AppBar berisi judul "Biodata Saya".
  • Foto profil (CircleAvatar).
  • Nama, kelas, & hobi dengan widget Text.
  • Disusun rapi dengan Column.
  • FAB tombol edit di pojok.

๐Ÿงฉ Materi yang Dipakai

MaterialApp โ€ข Scaffold โ€ข AppBar โ€ข Body โ€ข Column โ€ข Text โ€ข Icon โ€ข CircleAvatar โ€ข FloatingActionButton.

๐Ÿš€ Mini Project โ€” Kode Bagian 1

Fondasi Aplikasi (main & MaterialApp)

Bagian ini menyiapkan pondasi: titik masuk dan tema aplikasi. Baca komentar // di tiap baris.

import 'package:flutter/material.dart'; // ambil paket Flutter

void main() => runApp(const BiodataApp()); // titik masuk aplikasi

// Widget paling luar = pondasi aplikasi
class BiodataApp extends StatelessWidget {
  const BiodataApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Biodata',
      debugShowCheckedModeBanner: false,     // sembunyikan label debug
      theme: ThemeData(primarySwatch: Colors.deepPurple),
      home: const HalamanBiodata(),          // halaman utama
    );
  }
}
Penjelasan Singkat โ€ข main() menjalankan BiodataApp. โ€ข MaterialApp mengatur tema ungu & menunjuk halaman pertama.
๐Ÿš€ Mini Project โ€” Kode Bagian 2

Halaman Biodata (Scaffold & Isi)

class HalamanBiodata extends StatelessWidget {
  const HalamanBiodata({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Biodata Saya'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: const [
          CircleAvatar(
            radius: 50,
            child: Icon(Icons.person, size: 50),
          ),
          SizedBox(height: 16),
          Text('Sahil Pratama',
            style: TextStyle(
              fontSize: 22,
              fontWeight: FontWeight.bold,
            )),
          Text('Kelas 10 SMA - Mobile Dev'),
          SizedBox(height: 8),
          Text('Hobi: Coding, Game, Musik'),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: null,
        child: Icon(Icons.edit),
      ),
    );
  }
}

Breakdown Widget

  • Scaffold โ†’ kerangka layar.
  • AppBar โ†’ judul "Biodata Saya".
  • Column โ†’ susun isi ke bawah.
  • CircleAvatar โ†’ foto bulat.
  • SizedBox โ†’ beri jarak antar widget.
  • Text โ†’ nama, kelas, hobi.
  • FloatingActionButton โ†’ tombol edit.
๐Ÿ‘ค Biodata Saya
๐Ÿง‘โ€๐ŸŽ“
Sahil Pratama
Kelas 10 SMA - Mobile Dev
Hobi: Coding, Game, Musik
โœ๏ธ
๐ŸŽฌ Demo & Breakdown

Menjalankan Aplikasi Biodata

Beginilah proses saat kamu menekan tombol Run di editor:

flutter run

โœ… Yang Sudah Kamu Bangun

  • Aplikasi Flutter lengkap dari main() sampai tampil di layar.
  • Memakai MaterialApp, Scaffold, AppBar, Column, Text, Icon, & FAB.
  • Memahami alur: kode โ†’ build() โ†’ Widget Tree โ†’ layar HP.
๐Ÿง  Rangkuman BAB 4

Recap โ€” Klik Kartu untuk Membalik

โœ” Yang Sudah Kamu Kuasai

  • Memahami apa itu Flutter & struktur project-nya.
  • Mengenal konsep Widget, build(), MaterialApp, Scaffold, AppBar, Body, FAB.
  • Membedakan Hot Reload & Hot Restart.
  • Membangun aplikasi Biodata pertamamu.

๐Ÿ”ญ Selanjutnya โ€” BAB 5

Layout & Stateful Widget: membuat tampilan yang lebih kompleks dan aplikasi yang bisa berubah saat disentuh pengguna.

๐ŸŽฏ Latihan 1

Ubah Tema dan AppBar

Langkah Pengerjaan

  1. Buka project Flutter aplikasi Biodata kamu.
  2. Ubah backgroundColor AppBar menjadi merah (Colors.red).
  3. Ubah judul AppBar menjadi namamu sendiri.
  4. Ubah primarySwatch pada ThemeData menjadi Colors.red.
appBar: AppBar(
  title: const Text('Namamu'),     // ganti namamu
  backgroundColor: Colors.red,     // jadi merah
),
๐Ÿ‘ค Namamu
AppBar merah โœ”
Output yang Diharapkan AppBar berwarna merah bertuliskan namamu.
๐ŸŽฏ Latihan 2

Tambahkan Widget ke Biodata

Langkah Pengerjaan

  1. Tambahkan widget Text untuk hobi kamu.
  2. Tambahkan widget Icon yang sesuai hobimu.
  3. Bungkus ikon & teks dalam Row agar sejajar.
  4. Atur mainAxisAlignment: MainAxisAlignment.center.
Row(
  mainAxisAlignment: MainAxisAlignment.center,
  children: const [
    Icon(Icons.sports_esports),  // ikon hobi
    SizedBox(width: 8),
    Text('Hobi: Main Game'),
  ],
),
๐Ÿ‘ค Biodata Saya
๐ŸŽฎ   Hobi: Main Game
Output yang Diharapkan Baris baru berisi ikon + teks hobi yang sejajar di tengah.
๐Ÿ“‹ Tugas Akhir BAB 4

Buat Aplikasi Kartu Nama Digital

Deskripsi

Bangun aplikasi Flutter yang menampilkan kartu nama digitalmu sendiri dengan tampilan rapi dan menarik.

Requirement Wajib

  • Nama lengkap kamu.
  • Foto (boleh pakai Icon placeholder).
  • Sekolah / Kelas.
  • 3 hobi dengan ikon (pakai Row).
  • Nomor telepon / Instagram.
  • Background kartu dengan warna gradasi.

Rubrik Penilaian

KriteriaPoin
Kode berjalan tanpa error40
Tampilan rapi & menarik30
Memakai minimal 5 widget berbeda30

โฐ Deadline: ____ / ____ / ______  |  Kumpulkan file .dart + screenshot aplikasi.

โ† โ†’ untuk navigasi