Aplikasi Dessert Clicker

 Nama : Mohammad Ahnaf Fauzan

NRP: 5025211170

Aplikasi Dessert Clicker




  1. Analisis Kode Sumber Aplikasi "Dessert Clicker"
    Untuk memahami struktur serta fungsionalitas aplikasi, berikut adalah penjabaran dari komponen-komponen penting yang terdapat dalam proyek ini:

  2. Struktur Data: Dessert.kt dan Datasource.kt
    Aplikasi ini menggunakan pendekatan data yang sederhana namun efektif dalam merepresentasikan berbagai jenis makanan penutup (dessert), dengan memanfaatkan data class pada Kotlin.


data class Dessert( val imageId: Int, val price: Int, val startProductionAmount: Int )

Penjelasan atribut:

  • imageId: ID untuk gambar (resource drawable) dari dessert.

  • price: Harga per unit dari dessert.

  • startProductionAmount: Jumlah minimum penjualan sebelum dessert ini mulai muncul di aplikasi.
    Data tersebut disediakan secara statis melalui file Datasource.kt dalam bentuk List<Dessert>.

  1. Antarmuka Pengguna (UI) dengan Jetpack Compose
    Seluruh tampilan dibangun menggunakan pendekatan deklaratif Jetpack Compose. Fokus utama pengembangan UI berada di dalam file MainActivity.kt.

a. Manajemen Status (State Management)
Jetpack Compose menggunakan konsep state untuk menangani data yang berubah. Dengan rememberSaveable, status tetap tersimpan meskipun terjadi perubahan konfigurasi (seperti rotasi layar).


var revenue by rememberSaveable { mutableStateOf(0) } var dessertsSold by rememberSaveable { mutableStateOf(0) }

b. Fungsi Composable untuk UI
Fungsi utama seperti DessertClickerScreen digunakan untuk menyusun struktur UI: mulai dari gambar latar, dessert yang dapat diklik, hingga informasi transaksi.


Image( painter = painterResource(dessertImageId), contentDescription = null, modifier = Modifier.clickable { onDessertClicked() } )

Fitur .clickable memungkinkan pengguna berinteraksi langsung dengan gambar dessert.

  1. Logika Aplikasi dan Lifecycle Aktivitas
    a. Logika Pemilihan Dessert
    Fungsi determineDessertToShow() digunakan untuk menentukan dessert mana yang tampil berdasarkan jumlah penjualan saat ini:


fun determineDessertToShow(desserts: List<Dessert>, dessertsSold: Int): Dessert { var dessertToShow = desserts.first() for (dessert in desserts) { if (dessertsSold >= dessert.startProductionAmount) { dessertToShow = dessert } else { break } } return dessertToShow }

Fungsi ini efisien karena menghentikan iterasi setelah menemukan batas jumlah penjualan.

b. Observasi Siklus Hidup (Activity Lifecycle)
Aplikasi ini juga dirancang untuk menunjukkan bagaimana Android mengelola siklus hidup Activity. Pada MainActivity, beberapa metode lifecycle seperti onCreate(), onStart(), dan onDestroy() di-override untuk mencatat log aktivitas.


override fun onStart() { super.onStart() Log.d(TAG, "onStart Called") }

Hal ini membantu pengembang memahami alur siklus hidup saat aplikasi berjalan, dijeda, atau dihentikan.

Link Github

Komentar

Postingan populer dari blog ini

Tugas pertemuan 3

Tugas 1 PPB A

Tugas 4 (basic-android-kotlin-compose-training-dice-roller)