Tujuan praktikum ini yaitu mahasiswa mampu membuat membuat basic form untuk menerima inputan dari keyboard dan mengelola inputan:
1. Membuat beberapa input widgets
2. Membuat dan mengontrol inputan dari user
Computer / laptop yang telah terinstall lingkungan flutter development
1. Buat file dart baru dengan nama form-textfield didalam folder lib
2. Buat tampilan basic form dengan menggunakan Widget TextField untuk inputan, ElevatedButton untuk memberikan event listener. Buat tampilan menggunakan kode program berikut:
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('Basic Form'),
),
body: const MyForm(),
),
);
}
}
class MyForm extends StatefulWidget {
const MyForm({super.key});
@override
State<MyForm> createState() => _MyFormState();
}
class _MyFormState extends State<MyForm> {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text('Masukkan nama anda :'),
const SizedBox(
height: 10,
),
const TextField(
decoration: InputDecoration(
labelText: 'Nama Lengkap',
hintText: 'Misalnya masnoer',
border: OutlineInputBorder(),
prefixIcon: Icon(Icons.person)),
),
const SizedBox(
height: 20,
),
ElevatedButton(
onPressed: () {},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.amber, foregroundColor: Colors.black),
child: const Text('Tampilkan mama'))
],
),
);
}
}
Jika kita run maka akan tampil seperti gambar berikut:
3. Pada class _MyFormState tambahkan kode program berikut:
TextEditingController _textEditingController = TextEditingController();
@override
void dispose() {
_textEditingController.dispose();
super.dispose();
}
Penjelasan:
4. Tambahkan property berikut pada Widget TextField
TextField(
decoration: const InputDecoration(
labelText: 'Nama Lengkap',
hintText: 'Misalnya masnoer',
border: OutlineInputBorder(),
prefixIcon: Icon(Icons.person)),
controller: _textEditingController,
keyboardType: TextInputType.text,
onChanged: (text) {
print('Sedang mengetik teks : ,$text');
},
),
Penjelasan:
5. Tambahkan kode program berikut pada widget ElevatedButton
onPressed: () {
String inputText = _textEditingController.text;
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Nama anda adalah , $inputText'))
);
},
Penjelasan:
6. Simpan kemudian RUN maka akan tampil seperti gambar berikut:
1. Buat file baru didalam folder lib dengan nama form-textformfield
2. Buat form inputan menggunakan 2 buah widget TextFormField dan 1 buah ElevatedButton, berikut kode program untuk tampilan tersebut.
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(\"Basic Form TextFormField\"),
),
body: const MyFormText(),
),
);
}
}
class MyFormText extends StatefulWidget {
const MyFormText({super.key});
@override
State<MyFormText> createState() => _MyFormTextState();
}
class _MyFormTextState extends State<MyFormText> {
@override
Widget build(BuildContext context) {
return Column(
children: [
const SizedBox(
height: 10,
),
TextFormField(
decoration: const InputDecoration(
labelText: \"Nama : \", border: OutlineInputBorder()),
),
const SizedBox(
height: 10,
),
TextFormField(
decoration: const InputDecoration(
labelText: \"Email : \", border: OutlineInputBorder()),
),
const SizedBox(
height: 10,
),
SizedBox(
width: double.infinity,
child:
ElevatedButton(onPressed: () {}, child: const Text('Submit')))
],
);
}
}
Jika di jalankan maka tampilannya seperti gambar berikut:
3. Tambahkan pada class _MyFormTextState kode berikut:
final _formKey = GlobalKey<FormState>();
final _nameController = TextEditingController();
final _emailController = TextEditingController();
@override
void dispose() {
_nameController.dispose();
_emailController.dispose();
super.dispose();
}
void _submitForm(){
if (_formKey.currentState!.validate()) {
String name = _nameController.text;
String email = _emailController.text;
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Validasi $name, $email Berhasil'))
);
}
}
Penjelasan:
4. Pada widget tampilan bungkus menggunakan widget Form dan tambahkan key: _formKey,
5. Ubah kode program pada TextFormField menjadi seperti kode program berikut ini.
TextFormField(
controller: _nameController,
decoration: const InputDecoration(
labelText: \"Nama : \", border: OutlineInputBorder()),
validator: (value){
if (value == null || value.isEmpty) {
return 'Masukkan nama anda';
}
return null;
},
),
TextFormField(
controller: _emailController,
decoration: const InputDecoration(
labelText: \"Email : \", border: OutlineInputBorder()),
validator: (value){
if (value == null || value.isEmpty) {
return 'Masukkan email anda ';
}
if(!value.contains('@')){
return 'Email tidak valid';
}
return null;
},
),
6. Selanjutnya tambahkan method _submitForm pada method onPressed di ElevatedButton seperti kode program berikut.
SizedBox(
width: double.infinity,
child: ElevatedButton(
onPressed: _submitForm, child: const Text('Submit')))
7. Simpan dan RUN maka akan muncul seperti gambar berikut.