Hari 19: Form & Input Validation
60 min
Last updated 09 Apr 2026
Form di Flutter
import "package:flutter/material.dart";
class FormRegistrasi extends StatefulWidget {
@override _FormRegistrasiState createState() => _FormRegistrasiState();
}
class _FormRegistrasiState extends State {
final _formKey = GlobalKey();
final _namaCtrl = TextEditingController();
final _emailCtrl = TextEditingController();
final _passCtrl = TextEditingController();
@override
void dispose() {
_namaCtrl.dispose();
_emailCtrl.dispose();
_passCtrl.dispose();
super.dispose();
}
void _submit() {
if (_formKey.currentState!.validate()) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Registrasi berhasil!")),
);
}
}
@override
Widget build(BuildContext context) {
return Form(
key: _formKey,
child: Column(children: [
TextFormField(
controller: _namaCtrl,
decoration: InputDecoration(labelText: "Nama"),
validator: (v) {
if (v == null || v.isEmpty) return "Nama wajib diisi";
if (v.length < 3) return "Nama minimal 3 karakter";
return null;
},
),
TextFormField(
controller: _emailCtrl,
decoration: InputDecoration(labelText: "Email"),
validator: (v) {
if (v == null || v.isEmpty) return "Email wajib diisi";
if (!RegExp(r"^[\w-]+@[\w-]+\.\w+$").hasMatch(v)) return "Email tidak valid";
return null;
},
),
ElevatedButton(onPressed: _submit, child: Text("Daftar")),
]),
);
}
}
💡
Notice: Validator mengembalikan String? — null berarti valid, String berarti error message.
Assignment
Buat validator untuk nama, email, dan password dengan berbagai aturan.
Expected output:
nama: Bu → Minimal 3 karakter
nama: Budi Santoso → VALID
email: bukan-email → Format email tidak valid
email: budi@test.com → VALID
password: abc123 → Minimal 8 karakter
password: SecurePass1 → VALID
Dart
main.dart
Solution
Output