MATERI PEMBELAJARAN FLUTTER — MEMAHAMI WIDGET

           PEMBELAJARAN FLUTTER — MEMAHAMI WIDGET



1. Tujuan Pembelajaran

Setelah mempelajari materi ini, peserta didik diharapkan mampu:

1. Menjelaskan pengertian widget pada Flutter.

2. Memahami fungsi widget dalam membangun aplikasi Flutter.

3. Membedakan "StatelessWidget" dan "StatefulWidget".

4. Mengenal beberapa widget dasar Flutter.

5. Membuat tampilan sederhana menggunakan widget.

6. Memahami konsep widget tree.

---

2. Pengertian Flutter

Flutter adalah framework yang digunakan untuk membuat aplikasi dengan satu basis kode untuk berbagai platform, seperti Android, iOS, web, dan desktop.

Flutter menggunakan bahasa pemrograman Dart.

Salah satu konsep terpenting dalam Flutter adalah Widget.

---

3. Apa Itu Widget?

Widget adalah komponen dasar yang digunakan untuk membangun tampilan dan perilaku aplikasi Flutter.

Hampir semua bagian aplikasi Flutter merupakan widget, mulai dari:

- Teks

- Tombol

- Gambar

- Kotak atau container

- Baris dan kolom

- Halaman aplikasi

- Struktur layout

Contohnya:

Text('Halo Flutter')

Kode tersebut membuat widget "Text" yang digunakan untuk menampilkan tulisan.

---

4. Konsep Widget Tree

Widget pada Flutter disusun dalam bentuk struktur bertingkat yang disebut Widget Tree.

Contoh:

MaterialApp

└── Scaffold

    ├── AppBar

    │ └── Text

    └── Body

        └── Center

            └── Text


Artinya, sebuah widget dapat memiliki widget lain sebagai child atau bagian di dalamnya.

Contoh kode:

Center(

  child: Text('Halo Flutter'),

)


Pada contoh tersebut:


- "Center" adalah parent widget.

- "Text" adalah child widget.

---

5. StatelessWidget

"StatelessWidget" adalah widget yang tampilannya tidak memiliki state yang berubah secara langsung selama widget tersebut digunakan.

Contoh:

class HelloWidget extends StatelessWidget {

  const HelloWidget({super.key});


  @override

  Widget build(BuildContext context) {

    return const Text('Halo Flutter!');

  }

}


Widget ini cocok digunakan untuk tampilan yang relatif tetap.


Ciri-ciri StatelessWidget

- Tidak menyimpan state yang dapat berubah.

- Cocok untuk tampilan sederhana.

- Menggunakan method "build()".

- Lebih sederhana dibandingkan "StatefulWidget".

---

6. StatefulWidget

"StatefulWidget" digunakan ketika tampilan atau data widget dapat berubah selama aplikasi berjalan.

Contohnya adalah:


- Counter

- Checkbox

- Form input

- Animasi

- Tombol yang mengubah tampilan

Contoh sederhana:


class CounterWidget extends StatefulWidget {

  const CounterWidget({super.key});


  @override

  State<CounterWidget> createState() => _CounterWidgetState();

}


class _CounterWidgetState extends State<CounterWidget> {

  int counter = 0;


  void tambah() {

    setState(() {

      counter++;

    });

  }


  @override

  Widget build(BuildContext context) {

    return Column(

      children: [

        Text('Nilai: $counter'),

        ElevatedButton(

          onPressed: tambah,

          child: const Text('Tambah'),

        ),

      ],

    );

  }

}


Ketika tombol ditekan, nilai "counter" berubah. "setState()" digunakan untuk memberi tahu Flutter bahwa tampilan perlu diperbarui.

---

7. Perbedaan StatelessWidget dan StatefulWidget

StatelessWidget| StatefulWidget

Tidak memiliki state yang berubah| Memiliki state yang dapat berubah

Cocok untuk tampilan tetap| Cocok untuk tampilan dinamis

Lebih sederhana| Memiliki objek State

Tidak menggunakan "setState()" untuk perubahan state| Dapat menggunakan "setState()"

Contoh: teks, ikon, tampilan sederhana| Contoh: counter, checkbox, form

Kesimpulan sederhana:

«Jika tampilan tidak perlu berubah berdasarkan state, gunakan "StatelessWidget". Jika tampilan perlu merespons perubahan state, gunakan "StatefulWidget".»

---

8. Widget Dasar yang Sering Digunakan

a. Text


Digunakan untuk menampilkan teks.


Text('Belajar Flutter')


b. Container


Digunakan sebagai wadah yang dapat diberi ukuran, warna, margin, padding, dan dekorasi.


Container(

  padding: const EdgeInsets.all(16),

  child: const Text('Hello'),

)


c. Center


Digunakan untuk menempatkan child di bagian tengah.


Center(

  child: Text('Tengah'),

)


d. Row


Digunakan untuk menyusun widget secara horizontal.


Row(

  children: [

    const Text('Nama:'),

    const Text('Andi'),

  ],

)


e. Column


Digunakan untuk menyusun widget secara vertikal.


Column(

  children: [

    const Text('Nama'),

    const Text('Alamat'),

  ],

)


f. Image


Digunakan untuk menampilkan gambar.


Image.network(

  'https://example.com/gambar.jpg',

)


g. Icon


Digunakan untuk menampilkan ikon.


const Icon(Icons.home)


h. ElevatedButton


Digunakan untuk membuat tombol.


ElevatedButton(

  onPressed: () {

    print('Tombol ditekan');

  },

  child: const Text('Klik Saya'),

)


---

9. Scaffold


"Scaffold" merupakan widget yang menyediakan struktur dasar sebuah halaman aplikasi Material Design.


Contohnya:


Scaffold(

  appBar: AppBar(

    title: const Text('Belajar Flutter'),

  ),

  body: const Center(

    child: Text('Halo Dunia!'),

  ),

)


Bagian yang umum digunakan pada "Scaffold" antara lain:


- "appBar" → bagian atas aplikasi.

- "body" → isi utama halaman.

- "floatingActionButton" → tombol aksi mengambang.

- "drawer" → menu samping.

- "bottomNavigationBar" → navigasi bagian bawah.

---

10. Contoh Program Sederhana


Berikut contoh aplikasi Flutter sederhana yang menggunakan 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(

      home: Scaffold(

        appBar: AppBar(

          title: const Text('Belajar Widget'),

        ),

        body: Center(

          child: Column(

            mainAxisAlignment: MainAxisAlignment.center,

            children: [

              const Icon(

                Icons.school,

                size: 60,

              ),

              const SizedBox(height: 16),

              const Text(

                'Belajar Flutter',

                style: TextStyle(fontSize: 24),

              ),

              const SizedBox(height: 16),

              ElevatedButton(

                onPressed: () {

                  print('Tombol ditekan');

                },

                child: const Text('Mulai Belajar'),

              ),

            ],

          ),

        ),

      ),

    );

  }

}


Pada program tersebut terdapat beberapa widget:


MaterialApp

└── Scaffold

    ├── AppBar

    │ └── Text

    └── Center

        └── Column

            ├── Icon

            ├── SizedBox

            ├── Text

            ├── SizedBox

            └── ElevatedButton

                └── Text


---

11. Properti pada Widget

Widget biasanya memiliki berbagai properti untuk mengatur tampilannya.


Contoh:


Text(

  'Flutter',

  style: TextStyle(

    fontSize: 24,

    fontWeight: FontWeight.bold,

  ),

)


Pada contoh tersebut:


- "fontSize" mengatur ukuran teks.

- "fontWeight" mengatur ketebalan teks.


Contoh lainnya:


Container(

  width: 200,

  height: 100,

  padding: const EdgeInsets.all(16),

  child: const Text('Container'),

)


Properti dapat digunakan untuk mengatur ukuran, posisi, jarak, dan tampilan widget.


---

12. Child dan Children

Beberapa widget memiliki child, sedangkan widget lainnya memiliki children.


Menggunakan child


Biasanya digunakan jika widget hanya memiliki satu anak.


Center(

  child: Text('Halo'),

)


Menggunakan children


Digunakan jika widget dapat memiliki beberapa anak.


Column(

  children: [

    Text('Satu'),

    Text('Dua'),

    Text('Tiga'),

  ],

)


Perhatikan perbedaannya:


child → satu widget

children → beberapa widget


---


13. Build Method


Setiap widget yang menampilkan UI menggunakan method "build()" untuk menentukan tampilan yang akan dibuat.


Contoh:


@override

Widget build(BuildContext context) {

  return const Text('Hello Flutter');

}


Method "build()" mengembalikan sebuah widget.


Jadi, secara sederhana:


build()

   ↓

menghasilkan Widget

   ↓

Widget ditampilkan pada layar


---


14. Kelebihan Konsep Widget


Penggunaan widget membuat pengembangan aplikasi Flutter menjadi lebih terstruktur.


Beberapa manfaatnya:


1. Reusable — widget dapat digunakan kembali.

2. Terstruktur — UI dapat dibagi menjadi komponen-komponen kecil.

3. Mudah dikembangkan — perubahan pada satu bagian dapat dilakukan pada widget terkait.

4. Mudah dipahami — struktur aplikasi dapat dilihat melalui widget tree.

5. Mendukung UI dinamis — StatefulWidget dapat digunakan untuk menangani perubahan state.

---

15. Kesalahan yang Sering Terjadi


Beberapa kesalahan umum saat belajar widget Flutter:


1. Lupa menggunakan "child" atau "children"


Contoh yang benar:


Center(

  child: Text('Hello'),

)


2. Menggunakan "children" untuk widget yang hanya menerima "child"


Setiap widget memiliki properti yang berbeda. Dokumentasi widget perlu diperhatikan.


3. Tidak memahami perbedaan Stateless dan Stateful


Gunakan StatelessWidget untuk tampilan yang tidak membutuhkan perubahan state dan StatefulWidget ketika state perlu berubah.


4. Terlalu banyak widget dalam satu file


Jika aplikasi sudah besar, widget dapat dipecah menjadi beberapa widget agar kode lebih mudah dipelihara.


---

16. Latihan

Latihan 1 — Mengenal Widget


Sebutkan fungsi dari widget berikut:


1. "Text"

2. "Container"

3. "Center"

4. "Row"

5. "Column"

6. "Icon"

7. "ElevatedButton"

8. "Scaffold"


Latihan 2 — Membuat Tampilan


Buat sebuah halaman Flutter yang memiliki:


- AppBar dengan judul Profil Saya

- Icon di tengah

- Nama pengguna

- Deskripsi singkat

- Tombol Edit Profil


Gunakan minimal:


- "Scaffold"

- "AppBar"

- "Column"

- "Icon"

- "Text"

- "ElevatedButton"


Latihan 3 — StatefulWidget


Buat aplikasi counter sederhana yang memiliki:


- Angka awal "0"

- Tombol Tambah

- Setiap tombol ditekan, angka bertambah 1.


---


17. Rangkuman


Widget merupakan fondasi utama dalam Flutter. Tampilan aplikasi dibangun dengan menyusun berbagai widget menjadi sebuah widget tree.

Konsep penting yang perlu diingat:


«Flutter UI = kumpulan widget yang disusun menjadi sebuah struktur.»


Beberapa widget dasar yang penting dipahami adalah "Text", "Container", "Center", "Row", "Column", "Icon", "ElevatedButton", dan "Scaffold".


Selain itu, terdapat dua jenis widget utama:


- StatelessWidget → untuk UI yang tidak membutuhkan perubahan state.

- StatefulWidget → untuk UI yang dapat berubah berdasarkan state.


Dengan memahami widget, widget tree, properties, "child", "children", serta perbedaan StatelessWidget dan StatefulWidget, dasar pengembangan UI menggunakan Flutter akan menjadi jauh lebih mudah.

Komentar

Postingan populer dari blog ini

Dunia Mobile Development: Dari Pengguna HP Menjadi Pembuat Aplikasi

Membuat Aplikasi BMI Calculator di Flutter dengan Provider

Flutter Dasar: Dari Kode Menjadi Aplikasi Profil Siswa”