PPB G - 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 daridrawable -
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 dariMenuItem -
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
MaterialThemedanSurfacesebagai dasar tampilan
MenuScreen()
-
Menampilkan daftar kopi menggunakan
LazyColumn -
Menggunakan
CarddanImageuntuk 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 dibuatOrderItem. -
Jika item sudah ada di keranjang, maka
quantityakan 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
MaterialThemedan skema warna yang konsisten -
Mendukung dark/light theme berdasarkan preferensi sistem
-
Komponen UI seperti
Card,TopAppBar,Text, danButtondigunakan dengan gaya modern
Desain Responsif
-
Gunakan
WindowInsets,Modifier.padding()untuk kenyamanan pada berbagai ukuran layar -
Gunakan
ImagedenganContentScale.Cropuntuk 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
Posting Komentar