PPB G - Pertemuan 6
Nama: Moh. rosy haqqy aminy
NRP: 5025211012
Kelas: PPB G
Membuat converter sederhana
link github: https://github.com/rosyhaqqy/Tugas_Tugas_PPB/tree/main/converter
🌍 Aplikasi Android Currency Converter dengan Jetpack Compose
Aplikasi ini merupakan konverter mata uang sederhana yang dibangun menggunakan Jetpack Compose, framework modern dari Android untuk membangun antarmuka pengguna. Pengguna dapat memasukkan jumlah uang, memilih mata uang asal dan tujuan, lalu melihat hasil konversi secara langsung.
📱 Struktur Utama: MainActivity
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
CurrencyChangerTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
CurrencyChangerApp()
}
}
}
}
}
-
enableEdgeToEdge()
digunakan agar UI memanfaatkan area penuh layar. -
CurrencyChangerApp()
adalah composable utama yang membangun UI konverter mata uang. -
CurrencyChangerTheme
danSurface
digunakan untuk styling tema bawaan Material 3.
💱 Fungsi Utama: CurrencyChangerApp()
Fungsi ini berisi UI dan logika utama aplikasi. Berikut fitur-fiturnya:
-
Dropdown untuk memilih mata uang
-
TextField untuk input jumlah
-
Tombol konversi
-
Card untuk menampilkan hasil
Variabel State
val currencies = listOf("USD", "EUR", "JPY", "GBP", "AUD", "CAD", "CHF", "CNY", "IDR")
var amount by remember { mutableStateOf("") }
var fromCurrency by remember { mutableStateOf(currencies[0]) }
var toCurrency by remember { mutableStateOf(currencies[4]) }
var result by remember { mutableStateOf("0.00") }
-
Menyimpan nilai input (
amount
), pilihan mata uang (fromCurrency
,toCurrency
), dan hasil konversi (result
).
🔻 Dropdown Pilihan Mata Uang
Menggunakan ExposedDropdownMenuBox
dari Material 3 untuk menampilkan daftar mata uang yang bisa dipilih.
ExposedDropdownMenuBox(
expanded = fromDropdownExpanded,
onExpandedChange = { fromDropdownExpanded = it }
) {
OutlinedTextField(...) // Menampilkan mata uang terpilih
ExposedDropdownMenu(...) // Daftar pilihan
}
-
Komponen ini digunakan dua kali: satu untuk "From", satu untuk "To".
-
Saat user memilih mata uang, hasil konversi langsung diperbarui jika input
amount
sudah terisi.
🔢 TextField untuk Input Jumlah
OutlinedTextField(
value = amount,
onValueChange = {
amount = it
result = convertCurrency(amount.toDoubleOrNull() ?: 0.0, fromCurrency, toCurrency)
},
label = { Text("Amount") },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal)
)
-
Input angka dikonversi secara real-time saat user mengetik.
-
Gunakan
toDoubleOrNull()
agar aplikasi tidak crash jika input bukan angka.
🔘 Tombol Konversi
Button(onClick = {
result = convertCurrency(amount.toDoubleOrNull() ?: 0.0, fromCurrency, toCurrency)
}) {
Text("Convert")
}
-
Mengaktifkan fungsi konversi secara manual jika pengguna ingin menekan tombol dulu.
📦 Tampilan Hasil
Card {
Column {
Text("Result")
Text("$result $toCurrency")
Text("$amount $fromCurrency = $result $toCurrency")
}
}
-
Hasil konversi ditampilkan dalam bentuk teks yang estetik di dalam
Card
.
🔁 Fungsi Konversi: convertCurrency()
fun convertCurrency(amount: Double, from: String, to: String): String {
val rates = mapOf(
"USD" to 1.0,
"EUR" to 0.92,
"JPY" to 152.5,
"GBP" to 0.78,
"AUD" to 1.56,
"CAD" to 1.38,
"CHF" to 0.90,
"CNY" to 7.23,
"IDR" to 16100.0
)
val usdAmount = if (from == "USD") amount else amount / rates[from]!!
val targetAmount = if (to == "USD") usdAmount else usdAmount * rates[to]!!
val roundedAmount = when (to) {
"JPY", "IDR" -> round(targetAmount)
else -> round(targetAmount * 100) / 100
}
return when (to) {
"JPY", "IDR" -> roundedAmount.toInt().toString()
else -> String.format("%.2f", roundedAmount)
}
}
-
Langkah konversi:
-
Semua nilai dikonversi ke USD dulu.
-
Dari USD, dikonversi ke mata uang target.
-
Nilai dibulatkan:
-
Untuk
JPY
danIDR
: dibulatkan ke bilangan bulat. -
Untuk lainnya: dibulatkan ke 2 angka desimal.
-
-
📱 Preview UI
@Preview(showBackground = true)
@Composable
fun CurrencyChangerPreview() {
CurrencyChangerTheme {
CurrencyChangerApp()
}
}
Digunakan saat pengembangan agar bisa melihat UI langsung di Android Studio Preview tanpa harus menjalankan emulator.
Komentar
Posting Komentar