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 dan Surface digunakan untuk styling tema bawaan Material 3.


💱 Fungsi Utama: CurrencyChangerApp()

Fungsi ini berisi UI dan logika utama aplikasi. Berikut fitur-fiturnya:

  1. Dropdown untuk memilih mata uang

  2. TextField untuk input jumlah

  3. Tombol konversi

  4. 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:

    1. Semua nilai dikonversi ke USD dulu.

    2. Dari USD, dikonversi ke mata uang target.

    3. Nilai dibulatkan:

      • Untuk JPY dan IDR: 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

Postingan populer dari blog ini

Latihan 1 (PBKK)

PPL-EAS

PPL-PERTEMUAN(14)