Tugas 7 Currency Converter

 Nama : Mohammad Ahnaf Fauzan

NRP: 5025211170

Currency Converter

Pada pertemuan ke 7 ini kami diminta untuk membuat aplikasi currency converter. Pada aplikasi  ini kami diminta setidaknya dapat mengkonversi 10 mata uang. Berikut kode yang sudah dihasilkan:

package com.example.currencyconverter

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp
import androidx.compose.foundation.clickable

import com.example.currencyconverter.ui.theme.CurrencyConverterTheme

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
CurrencyConverterTheme {
Surface(modifier = Modifier.fillMaxSize()) {
CurrencyConverterScreen()
}
}
}
}
}

@Composable
fun CurrencyConverterScreen() {
val currencies = listOf("USD", "EUR", "IDR", "JPY", "GBP", "AUD", "CAD", "CHF", "CNY", "SGD")

val exchangeRates = mapOf(
"USD" to 1.0,
"EUR" to 0.94,
"IDR" to 15900.0,
"JPY" to 154.0,
"GBP" to 0.80,
"AUD" to 1.52,
"CAD" to 1.36,
"CHF" to 0.91,
"CNY" to 7.2,
"SGD" to 1.35
)

var amountInput by remember { mutableStateOf("") }
var fromCurrency by remember { mutableStateOf("USD") }
var toCurrency by remember { mutableStateOf("IDR") }
var result by remember { mutableStateOf("") }

Column(modifier = Modifier
.fillMaxSize()
.padding(16.dp),
verticalArrangement = Arrangement.spacedBy(12.dp)
) {
OutlinedTextField(
value = amountInput,
onValueChange = { amountInput = it },
label = { Text("Amount") },
keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number),
modifier = Modifier.fillMaxWidth()
)

CurrencyDropdown(label = "From", selectedCurrency = fromCurrency, currencies = currencies) {
fromCurrency = it
}

CurrencyDropdown(label = "To", selectedCurrency = toCurrency, currencies = currencies) {
toCurrency = it
}

Button(
onClick = {
val amount = amountInput.toDoubleOrNull()
if (amount != null) {
val usdAmount = amount / exchangeRates[fromCurrency]!!
val converted = usdAmount * exchangeRates[toCurrency]!!
result = "%.2f $fromCurrency = %.2f $toCurrency".format(amount, converted)
} else {
result = "Invalid input"
}
},
modifier = Modifier.fillMaxWidth()
) {
Text("Convert")
}

Text(
text = result,
style = MaterialTheme.typography.bodyLarge
)
}
}

@Composable
fun CurrencyDropdown(
label: String,
selectedCurrency: String,
currencies: List<String>,
onCurrencySelected: (String) -> Unit
) {
var expanded by remember { mutableStateOf(false) }

Column {
Text(label)
Box {
OutlinedTextField(
value = selectedCurrency,
onValueChange = {},
readOnly = true,
modifier = Modifier.fillMaxWidth(),
label = { Text(label) }
)
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false }
) {
currencies.forEach { currency ->
DropdownMenuItem(
text = { Text(currency) },
onClick = {
onCurrencySelected(currency)
expanded = false
}
)
}
}

Spacer(
modifier = Modifier
.matchParentSize()
.padding(8.dp)
.clickable { expanded = true }
)
}
}
}

Adapun pada aplikasi ini, kita bisa melakukan input untuk jumlah uang yang ingin dihitung, kemudian disediakan juga pilihan mata uang yang ingin dihitung. Berikut merupakan tampilan dari aplikasi ini:


Setelah melakukan input dari jumlah, kemudian mata uang yang ingin dikonversi, maka selanjutnya kita dapat menekan tombol convert untuk mengerluarkan hasil konversi.

Komentar

Postingan populer dari blog ini

Tugas 1 PPB A

Tugas pertemuan 3

Final Project