Pertemuan 12 - Login MVVM

Nama                : Ahmad Fadhilah Mappisara
NRP                  : 5025221195
Mata Kuliah      : Pemrograman Perangkat Bergerak (C)

Login MVVM


1. Deskripsi Projek

Projek ini adalah aplikasi mobile berbasis Android yang mengimplementasikan fitur autentikasi dasar, yaitu pendaftaran pengguna baru (Register) dan masuk ke dalam akun (Login). Aplikasi ini dirancang dengan mengikuti praktik terbaik pengembangan modern Android menggunakan arsitektur MVVM (Model-View-ViewModel), penyimpanan lokal menggunakan Room Database, serta antarmuka deklaratif berbasis Jetpack Compose dengan desain modern (mengadopsi estetika gradasi dan efek glassmorphism).


2. Fitur-Fitur Utama

  • Pendaftaran Pengguna Baru (Register):
    • Validasi input: Username dan password tidak boleh kosong.
    • Validasi kekuatan password: Panjang password minimal harus 4 karakter.
    • Validasi keunikan username: Memeriksa apakah username sudah terdaftar di database untuk menghindari duplikasi data.
    • Penyimpanan aman data kredensial ke dalam database lokal Room.
  • Masuk Akun (Login):
    • Validasi input: Username dan password tidak boleh kosong.
    • Pencocokan kredensial: Memverifikasi username dan mencocokkan password dengan data yang tersimpan di database lokal.
    • Umpan balik interaktif: Menampilkan status sukses menggunakan Toast dan status gagal menggunakan banner pesan kesalahan yang dinamis.
  • Antarmuka Pengguna Modern & Responsif:
    • Efek visual gradasi latar belakang dan kartu semi-transparan untuk tampilan premium.
    • Animasi transisi untuk pesan kesalahan menggunakan komponen AnimatedVisibility.
    • Indikator pemuatan (CircularProgressIndicator) selama proses akses database berlangsung.
    • Penyelarasan otomatis status UI dengan status autentikasi melalui StateFlow.

3. Teknologi dan Library yang Digunakan

Teknologi / Library Versi / Detail Deskripsi & Fungsi
Kotlin JDK 17 / Kotlin 1.9.22 Bahasa pemrograman utama yang digunakan untuk logika aplikasi Android.
Jetpack Compose BOM 2023.10.01 (Material 3) Toolkit modern untuk membangun UI deklaratif Android secara native dengan komponen Material Design 3.
Room Database 2.6.1 Library abstraksi di atas SQLite untuk menyimpan data pengguna secara lokal dengan cara yang aman dan efisien.
Kotlin Coroutines & Flow Coroutines 1.7.3 / StateFlow Digunakan untuk menangani operasi asinkron (operasi database) di latar belakang (background thread) tanpa memblokir UI thread.
ViewModel (Compose) 2.7.0 Komponen arsitektur Android untuk mengelola dan memelihara status (state) UI agar tetap konsisten selama siklus hidup aplikasi berjalan.
KSP (Kotlin Symbol Processing) Terintegrasi dengan Room compiler Alat pemrosesan anotasi Kotlin berkinerja tinggi yang digunakan untuk menghasilkan kode boilerplate Room secara otomatis.

4. Arsitektur Aplikasi

Aplikasi ini dibangun menggunakan arsitektur MVVM (Model-View-ViewModel) yang membagi kode menjadi beberapa lapisan tanggung jawab:

  • Model (Data Layer):
    • User.kt: Kelas data (Entity) yang mendefinisikan tabel users di database.
    • UserDao.kt: Data Access Object yang berisi kueri SQLite untuk berinteraksi dengan database Room (Insert, Select).
    • AppDatabase.kt: Instansiasi database Room dengan implementasi pola Singleton untuk memastikan hanya ada satu instance database.
    • UserRepository.kt: Lapisan penengah (Repository) yang memediasi akses data antara ViewModel dan DAO.
  • ViewModel Layer:
    • LoginViewModel.kt: Menangani status form login/register (username, password), memproses logika validasi input, serta memanggil repositori secara asinkron menggunakan Coroutines. State UI diekspos melalui StateFlow<LoginUiState>.
  • View Layer (UI Layer):
    • MainActivity.kt: Titik masuk utama aplikasi, bertugas menginisialisasi database, membuat ViewModel via Custom Factory, dan merender tampilan Compose.
    • LoginScreen.kt: Layar UI deklaratif yang mengamati perubahan state dari ViewModel dan merender kolom teks, tombol login/register, status pemuatan, serta pesan kesalahan.

5. Skema Database

Penyimpanan lokal menggunakan Room Database dengan skema tabel tunggal berikut:

Tabel: users

Nama Kolom Tipe Data Keterangan
id INTEGER (PrimaryKey) Auto-generate (ID unik untuk setiap pengguna).
username TEXT Nama pengguna unik untuk proses login.
password TEXT Kata sandi rahasia untuk autentikasi.

6. Struktur File Projek

app/src/main/java/com/example/loginmvvm/
│
├── data/
│   ├── local/
│   │   ├── AppDatabase.kt (Inisialisasi Database Room)
│   │   ├── User.kt (Entitas Data Pengguna)
│   │   └── UserDao.kt (Kueri CRUD Database)
│   │
│   └── repository/
│       └── UserRepository.kt (Penyedia Data ke ViewModel)
│
├── ui/
│   └── login/
│       ├── LoginScreen.kt (Tampilan UI dengan Jetpack Compose)
│       └── LoginViewModel.kt (Pengatur Logika Bisnis & UI State)
│
├── LoginApplication.kt (Inisialisasi Database Level Aplikasi)
└── MainActivity.kt (Titik Masuk Utama & Pembuat ViewModel)
    

7. Alur Logika Bisnis (Workflow)

  1. Alur Registrasi: Pengguna memasukkan username & password -> Validasi input -> Cek duplikasi di database -> Simpan data user -> UI menampilkan status sukses -> Form direset untuk login.
  2. Alur Login: Pengguna memasukkan username & password -> Validasi input -> Cari user di database berdasarkan username -> Cocokkan password -> Jika sukses, tampilkan pesan sukses -> Jika gagal, tampilkan pesan error yang sesuai.

Hasil Preview



Link Repository:

Comments

Trending This Week

EAS - CoffeeBliss

ETS - PPB

Pertemuan 11 - Skoola Marketplace