Input Widgets dan Basic Form

A. Tujuan

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

B. Alat

Computer / laptop yang telah terinstall lingkungan flutter development

C. Langkah-langkah

C.1 Basic Form TextField

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:

Gambar Output Basic Form TextField

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:

Gambar Output TextField Submit

C.2 Basic Form TextFormField

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:

Gambar Output Basic Form TextFormField

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.

Gambar Output TextFormField Submit

Link https://github.com/AbyssWatcher07/Aplikasi_Mobile/blob/main/lib/tugas_praktikum3.dart