Tugas 4: Membuat Aplikasi Dice Roller
Jetpack Compose, sebagai toolkit UI modern untuk Android, beroperasi pada paradigma deklaratif. Artinya, kita mendeskripsikan tampilan UI untuk state tertentu, dan Compose akan menanganinya secara otomatis saat state berubah. Aplikasi pengocok dadu (dice roller) adalah contoh sempurna untuk membedah konsep fundamental ini dalam praktik.
Dalam analisis ini, kita akan mempelajari kode aplikasi pengocok dadu untuk memahami bagaimana manajemen state, penanganan event, dan animasi sederhana bekerja secara harmonis di Jetpack Compose.
Struktur Aplikasi
Titik masuk aplikasi ada di MainActivity, yang mengatur tema dan memanggil composable utama, DiceRollerApp.
@Preview
@Composable
fun DiceRollerApp() {
DiceWithButtonAndImage(
modifier = Modifier
.fillMaxSize()
.wrapContentSize(Alignment.Center)
)
}
Composable DiceRollerApp ini berfungsi sebagai wadah penataan letak. Ia menggunakan Modifier.fillMaxSize() untuk memenuhi seluruh layar dan .wrapContentSize(Alignment.Center) untuk memposisikan kontennya, yaitu DiceWithButtonAndImage, tepat di tengah layar.
Komponen Inti: DiceWithButtonAndImage
Di sinilah seluruh logika dan elemen UI aplikasi berada. Mari kita analisis bagian-bagian utamanya.
@Composable
fun DiceWithButtonAndImage(modifier: Modifier = Modifier) {
var result by remember { mutableIntStateOf(1) }
val imageResource = when (result) {
1 -> R.drawable.dice_1
2 -> R.drawable.dice_2
3 -> R.drawable.dice_3
4 -> R.drawable.dice_4
5 -> R.drawable.dice_5
else -> R.drawable.dice_6
}
Column(modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally) {
// ... konten kolom ...
}
}
1. Manajemen State dengan remember
State adalah data yang dapat berubah seiring waktu dan memengaruhi UI. Di sini, result adalah state yang menyimpan hasil kocokan dadu.
var result by remember { mutableIntStateOf(1) }: Baris ini mendeklarasikan variabel state.mutableIntStateOf(1)menciptakan objek state yang dapat diobservasi dengan nilai awal 1. Penggunaanremembermemastikan bahwa nilairesultakan tetap ada (diingat) selama proses recomposition, sehingga UI tidak selalu di-reset ke nilai awalnya.
2. Logika Kondisional untuk Gambar
Berdasarkan nilai result saat ini, kita perlu menampilkan gambar dadu yang sesuai. Ekspresi when adalah cara yang sangat bersih dan mudah dibaca untuk melakukan pemetaan ini. Hasil dari blok when (sebuah ID resource drawable) disimpan dalam variabel imageResource.
3. Penanganan Interaksi dan Pembaruan State
Inti dari fungsionalitas aplikasi terletak pada Button dan aksi onClick-nya.
Button(
onClick = { result = (1..6).random() },
) {
Text(text = stringResource(R.string.roll), fontSize = 24.sp)
}
Ketika pengguna menekan tombol, lambda onClick dieksekusi. Di dalamnya, (1..6).random() menghasilkan angka acak baru yang kemudian ditugaskan ke variabel state result. Inilah momen krusialnya: setiap kali nilai result berubah, Jetpack Compose secara otomatis akan menjalankan ulang (recompose) semua composable yang membaca nilai tersebut.
4. Animasi Transisi Halus dengan Crossfade
Alih-alih membuat gambar dadu berubah secara tiba-tiba, kita dapat menambahkan sentuhan visual yang lebih baik dengan animasi. Crossfade adalah composable yang ideal untuk ini.
Crossfade(targetState = imageResource) { diceImage ->
Image(
painter = painterResource(diceImage),
contentDescription = result.toString()
)
}
Crossfade mengamati perubahan pada targetState-nya (dalam hal ini, imageResource). Ketika imageResource berubah akibat pembaruan result, Crossfade secara otomatis menganimasikan transisi dari konten lama (gambar dadu sebelumnya) ke konten baru (gambar dadu yang baru) dengan efek "fade" yang halus.
Alur Kerja Reaktif: Dari Klik Hingga Tampilan
Secara ringkas, alur kerja aplikasi ini adalah sebagai berikut:
- Pengguna menekan tombol "Roll".
- Event
onClickterpicu, menghasilkan angka acak baru. - Nilai state
resultdiperbarui dengan angka baru tersebut. - Compose mendeteksi perubahan state dan menjadwalkan recomposition.
- Fungsi
DiceWithButtonAndImagedieksekusi ulang. - Variabel
imageResourcedihitung ulang berdasarkan nilairesultyang baru. CrossfademelihattargetStatetelah berubah dan menganimasikan transisi ke gambar baru.- Composable
Textjuga diperbarui untuk menampilkan angka baru. - UI pada layar pengguna kini mencerminkan state aplikasi yang terbaru.
Kesimpulan
Aplikasi pengocok dadu ini, meskipun sederhana, secara efektif mendemonstrasikan kekuatan model UI reaktif dari Jetpack Compose. Dengan hanya beberapa baris kode deklaratif, kita dapat mengelola state, merespons interaksi pengguna, dan bahkan menambahkan animasi yang elegan. Ini menunjukkan bagaimana Compose menyederhanakan pengembangan UI dengan memungkinkan kita fokus pada "apa" yang harus ditampilkan dalam state tertentu, bukan "bagaimana" cara memperbarui tampilan secara manual.
Referensi:
https://kuliahppb.blogspot.com/2024/03/komponen-button.html
https://developer.android.com/codelabs/basic-android-kotlin-compose-build-a-dice-roller-app#0

Komentar
Posting Komentar