Lompat ke konten utama
←

Flutter Dasar: Dart, Widget, dan State

Pelajaran 13 dari 18

State, navigasi, dan formulir

Formulir dan validasi

Setelah pelajaran ini kamu bisa menulis validator yang mengembalikan pesan atau null, memprediksi hasil validate() pada formulir berisi beberapa kolom, dan menempatkan GlobalKey serta controller di State.

  • ±13 menit
  • 3 latihan
  • Diperiksa 28 Okt 2026

Latihan di pelajaran ini butuh akun gratis. Progres, kode, dan catatanmu hanya tersimpan di browser ini. Masuk untuk menyimpannya

Materi

Form mengelompokkan beberapa kolom isian supaya bisa diperiksa sekaligus. Setiap kolom berupa TextFormField dengan fungsi validator. Validator menerima teks yang diketik dan mengembalikan String berisi pesan galat bila isinya tidak sah. Bila isinya sah, validator wajib mengembalikan null; nilai lain, seperti true atau teks kosong, bukan cara menyatakan lolos.

final _formKey = GlobalKey<FormState>(); // field di State, dibuat sekali

// di dalam build:
Form(
  key: _formKey,
  child: Column(children: [
    TextFormField(
      decoration: const InputDecoration(labelText: 'Nama penerima'),
      validator: (value) {
        if (value == null || value.trim().isEmpty) return 'Nama wajib diisi';
        return null;
      },
    ),
    ElevatedButton(
      onPressed: () {
        if (_formKey.currentState!.validate()) {
          // semua validator mengembalikan null: data boleh diproses
        }
      },
      child: const Text('Simpan'),
    ),
  ]),
)

Form diberi GlobalKey<FormState>. Pemanggilan _formKey.currentState!.validate() menjalankan semua validator di dalam form. Bila semuanya mengembalikan null, validate() bernilai true. Bila ada yang mengembalikan pesan, form dibangun ulang untuk menampilkan pesan di bawah kolom yang bermasalah, dan validate() bernilai false. Kunci itu dibuat sekali sebagai field di State milik StatefulWidget, bukan di dalam build yang berjalan berulang.

Untuk membaca isi kolom di luar validator, pasang TextEditingController pada properti controller dan baca controller.text, yang selalu berisi teks terkini di kolom itu. Controller dibuat di State dan wajib dibersihkan dengan dispose() saat State dibuang.

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 1 dari 3

Kolom nomor HP wajib diisi dan minimal 10 digit. Validator mana yang benar?

Pilih satu jawaban

Latihan 2 dari 3

Pengguna mengisi nama Rudi, membiarkan alamat kosong, lalu mengetuk Simpan. Apa yang terjadi?

Form(
  key: _formKey,
  child: Column(children: [
    TextFormField(
      validator: (v) => (v == null || v.trim().isEmpty) ? 'Nama wajib diisi' : null,
    ),
    TextFormField(
      validator: (v) => (v == null || v.trim().isEmpty) ? 'Alamat wajib diisi' : null,
    ),
    ElevatedButton(
      onPressed: () {
        if (_formKey.currentState!.validate()) {
          simpanPenerima();
        }
      },
      child: const Text('Simpan'),
    ),
  ]),
)
Pilih satu jawaban

Latihan 3 dari 3

Rekanmu menulis final formKey = GlobalKey<FormState>(); di dalam build. Di mana resep resmi Flutter membuat kunci itu?

Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Lanjutkan ke