PPB G - Setubruk

 Nama : Muhammad Hafidh Rosyadi
NRP : 5025211013
Kelas  : PPB G
 
 
 
 
 
 
 
KODE : https://github.com/Hfdrsyd/Tugas-PPB/tree/main/Setubruk

☕ Membangun Aplikasi Setubruk: Clone Starbucks dengan Kotlin & Jetpack Compose

Setubruk adalah aplikasi pembelajaran Android yang terinspirasi dari Starbucks. Aplikasi ini dirancang untuk mensimulasikan pengalaman pengguna dalam memilih menu kopi, melakukan pemesanan, dan mengumpulkan reward. Dibangun menggunakan Kotlin dan Jetpack Compose, aplikasi ini cocok untuk belajar tentang arsitektur modern Android, state management, dan desain UI responsif berbasis Material Design 3.


🌟 Gambaran Umum Aplikasi

Aplikasi Setubruk memberikan simulasi pembelian kopi secara digital dengan fitur-fitur seperti:

  • 📋 Menampilkan daftar menu minuman beserta harga dan gambar

  • 🛒 Menambahkan menu ke dalam keranjang pesanan

  • 📦 Mengelola jumlah item pesanan

  • 🎁 Sistem poin dan reward yang dapat ditukar dengan hadiah

  • 🎨 UI modern yang responsif dan mendukung light/dark theme


✨ Fitur Utama

Fitur Penjelasan
🧾 Pemesanan Menu Pengguna dapat memilih berbagai menu kopi
📷 Gambar Produk Setiap menu memiliki gambar representatif
🧮 Jumlah & Harga Menampilkan harga dan jumlah pesanan secara dinamis
🎁 Reward Points Sistem poin untuk mendapatkan hadiah
💡 Theming Material 3 Mendukung light dan dark mode secara otomatis

🏗️ Struktur Model Data

1. MenuItem.kt

data class MenuItem(
    val id: Int,
    val name: String,
    @DrawableRes val imageRes: Int,
    val price: Int
)
  • Digunakan untuk: Menyimpan data setiap minuman (kopi, teh, dll).

  • Properti penting:

    • id: Identifikasi unik menu

    • name: Nama minuman

    • imageRes: ID gambar minuman dari drawable

    • price: Harga item


2. OrderItem.kt

data class OrderItem(
    val menu: MenuItem,
    var quantity: Int = 1
)
  • Digunakan untuk: Mewakili item dalam pesanan pengguna.

  • Properti penting:

    • menu: Objek dari MenuItem

    • quantity: Jumlah pesanan dari item tersebut (bisa bertambah/berkurang)


3. RewardItem.kt

data class RewardItem(
    val id: Int,
    val name: String,
    @DrawableRes val imageRes: Int,
    val requiredPoints: Int
)
  • Digunakan untuk: Menyimpan data hadiah yang bisa ditukar dengan poin.

  • Properti penting:

    • name: Nama hadiah (misal: Mug, Diskon, dll)

    • imageRes: ID gambar hadiah

    • requiredPoints: Jumlah poin yang dibutuhkan untuk menukarkan hadiah


🧩 Komponen UI (Secara Umum)

Walau file UI belum dibagikan, berdasarkan struktur data dan pola aplikasi edukatif serupa, berikut struktur Compose yang umum:

SetubrukApp()

  • Fungsi utama yang memanggil seluruh bagian aplikasi

  • Menerapkan MaterialTheme dan Surface sebagai dasar tampilan

MenuScreen()

  • Menampilkan daftar kopi menggunakan LazyColumn

  • Menggunakan Card dan Image untuk setiap item menu

OrderScreen()

  • Menampilkan keranjang pesanan

  • Fitur tambah/kurangi jumlah

  • Hitung total harga otomatis dari quantity × price

RewardScreen()

  • Menampilkan daftar hadiah berdasarkan poin yang dikumpulkan

  • Fitur tukar poin (bisa menggunakan dialog konfirmasi)


🔁 Logika Inti Aplikasi

Sistem Pemesanan

  • Ketika pengguna memilih sebuah MenuItem, maka dibuat OrderItem.

  • Jika item sudah ada di keranjang, maka quantity akan ditambah.

  • Total harga = OrderItem.price × quantity, dijumlahkan seluruhnya.

Sistem Poin

  • Poin bertambah setiap kali melakukan pembelian

  • Reward hanya bisa ditukar jika userPoints >= requiredPoints


🎨 Theming & Desain

Material 3 Support

  • Menggunakan MaterialTheme dan skema warna yang konsisten

  • Mendukung dark/light theme berdasarkan preferensi sistem

  • Komponen UI seperti Card, TopAppBar, Text, dan Button digunakan dengan gaya modern

Desain Responsif

  • Gunakan WindowInsets, Modifier.padding() untuk kenyamanan pada berbagai ukuran layar

  • Gunakan Image dengan ContentScale.Crop untuk menjaga estetika gambar


🧠 Best Practices & Pembelajaran

Area Praktik Baik
Model Separation Data model dipisah dari UI dengan jelas
📦 Reusability Komponen seperti MenuItemCard dan RewardItemCard dapat digunakan ulang
🧠 State Management Cocok menggunakan remember, rememberSaveable, atau ViewModel untuk menyimpan state
🔄 Composable Structure UI disusun secara modular dan fungsional
🔒 Validation Reward hanya ditukar jika poin mencukupi


Komentar

Postingan populer dari blog ini

PPB G - Image Scroll

ETS - PPB G

Pertemuan 3 - PPB G