Praktikum Aplikasi Mobile

Laporan Praktikum 3 Aplikasi Mobile

Regi Heksa Ananda

Repository GitHub

A. Langkah Praktikum

1

Mengimpor Material Design & Class Stateful

Mengimpor material design dari library Flutter dan membuat class AddTransactionScreen yang berbasis StatefulWidget. Konsep stateful digunakan karena isi formulir (seperti teks input dan pilihan dropdown) akan memiliki state yang terus berubah saat terjadi interaksi dengan pengguna.

Mengimpor material design dan class AddTransactionScreen
2

Inisialisasi Class State

Menginisialisasi class State untuk layar formulir tersebut. Pada bagian ini, dideklarasikan GlobalKey<FormState> sebagai pengontrol utama form yang dapat memicu validasi, TextEditingController untuk membaca input judul dan nominal, serta inisialisasi awal nilai dropdown kategori. Fungsi dispose() juga dideklarasikan guna membersihkan controller dari memori untuk mencegah memory leak setelah layar ditutup.

Menginisialisasi class State
3

Membangun Kerangka UI

Membangun kerangka UI (User Interface) menggunakan Scaffold dengan tampilan AppBar. Bagian body utama dibungkus dengan SingleChildScrollView untuk menghindari error overflow pada layout saat layar mengecil akibat munculnya keyboard virtual. Di dalam scrollView tersebut, disematkan widget Form yang telah dikaitkan dengan _formkey.

Membangun kerangka UI dengan SingleChildScrollView
4

Input Judul Transaksi

Mengimplementasikan input kolom pertama menggunakan TextFormField untuk "Judul Transaksi". Input ini dilengkapi dengan logika validator bawaan untuk mengembalikan pesan error string ("Judul transaksi tidak boleh kosong") jika data yang dimasukkan kosong sebelum disimpan ke sistem.

Input kolom pertama Judul Transaksi
5

Input Nominal Saldo

Mengimplementasikan input kolom kedua untuk "Nominal (Rp)" dengan parameter tambahan berupa keyboardType: TextInputType.number. Hal ini memastikan bahwa sistem memunculkan keyboard angka. Terdapat dua tahapan validasi pada poin ini: memeriksa apakah input kosong dan mengecek apakah teks yang diketik benar-benar angka bulat yang valid (dengan int.tryParse).

Input kolom kedua Nominal Saldo
6

Input Kategori Dropdown

Mengimplementasikan input ketiga menggunakan DropdownButtonFormField untuk menampilkan menu pilihan kategori. Pilihan yang diklik oleh pengguna akan secara dinamis memperbarui nilai variabel _selectedCategory lewat pemanggilan metode setState() pada saat event onChanged terjadi.

Input ketiga Kategori Dropdown
7

Tombol Simpan Transaksi

Membuat ElevatedButton yang berfungsi sebagai tombol "Simpan Transaksi". Tombol ini memiliki event onPressed yang secara otomatis mengeksekusi semua logika validasi kolom input (_formKey.currentState!.validate()). Jika semua input divalidasi dengan berhasil, sistem akan memunculkan pop-up pemberitahuan berupa SnackBar berwarna hijau dengan informasi data sukses ditambahkan.

Membuat tombol Simpan Transaksi
8

Mendefinisikan Main Dart

Mendefinisikan titik awal program pada file main.dart. Class MyApp menjalankan framework MaterialApp, menyembunyikan tulisan banner debug, menentukan tema warna dasar deep purple, dan memanggil AddTransactionScreen sebagai tampilan home screen awal.

Mendefinisikan titik awal pada main.dart
9

Output Praktikum

Output dari aplikasi setelah dijalankan.

Output aplikasi

B. Latihan

1

Deklarasi _dateController

Menambahkan deklarasi _dateController dengan menggunakan tipe TextEditingController agar dapat menangkap teks dari fungsi kalender yang akan dibuat.

Deklarasi _dateController
2

Dispose _dateController

Mengikutsertakan variabel _dateController ke dalam kerangka fungsi dispose() supaya alokasi memori untuk input tanggal ini juga ikut dibersihkan saat widget dimusnahkan.

Dispose _dateController
3

Widget Tanggal Transaksi

Menyisipkan widget TextFormField baru (Input 4) berlabel "Tanggal Transaksi" sebelum penempatan tombol Simpan. Widget ini menggunakan properti readOnly: true agar kolom tidak memunculkan keyboard, melainkan hanya bereaksi pada fungsi onTap yang akan mengeksekusi fungsi showDatePicker. Hasil pemilihan tanggal kemudian diformat dengan struktur dua digit menggunakan fungsi padLeft (menjadi bentuk format standar DD/MM/YYYY) dan nilainya disimpan ke dalam _dateController.text menggunakan setState(). Kolom ini juga diamankan dengan validator untuk mencegah input kosong.

Widget Tanggal Transaksi
4

Output Latihan

Output berhasil

Output berhasil

Output validasi wajib diisi

Output validasi wajib diisi