63 lines
2.4 KiB
Kotlin
63 lines
2.4 KiB
Kotlin
package de.timklge.karooheadwind.screens
|
|
|
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
import androidx.compose.material3.DropdownMenuItem
|
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
|
import androidx.compose.material3.ExposedDropdownMenuBox
|
|
import androidx.compose.material3.ExposedDropdownMenuDefaults
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.MenuAnchorType
|
|
import androidx.compose.material3.OutlinedTextField
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.material3.TextField
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.mutableStateOf
|
|
import androidx.compose.runtime.remember
|
|
import androidx.compose.runtime.setValue
|
|
import androidx.compose.ui.Modifier
|
|
|
|
|
|
data class DropdownOption(val id: String, val name: String)
|
|
|
|
@OptIn(ExperimentalMaterial3Api::class)
|
|
@Composable
|
|
fun Dropdown(label: String, options: List<DropdownOption>, initialSelection: DropdownOption, onSelect: (selectedOption: DropdownOption) -> Unit) {
|
|
var expanded by remember { mutableStateOf(false) }
|
|
var selected by remember { mutableStateOf(initialSelection) }
|
|
|
|
ExposedDropdownMenuBox(
|
|
expanded = expanded,
|
|
onExpandedChange = { expanded = it },
|
|
) {
|
|
OutlinedTextField(
|
|
readOnly = true,
|
|
value = selected.name,
|
|
onValueChange = { },
|
|
modifier = Modifier.menuAnchor(MenuAnchorType.PrimaryEditable, true).fillMaxWidth(),
|
|
label = { Text(label) },
|
|
trailingIcon = {
|
|
ExposedDropdownMenuDefaults.TrailingIcon(
|
|
expanded = expanded
|
|
)
|
|
},
|
|
colors = ExposedDropdownMenuDefaults.textFieldColors()
|
|
)
|
|
ExposedDropdownMenu(
|
|
expanded = expanded,
|
|
onDismissRequest = { expanded = false },
|
|
) {
|
|
options.forEach { option ->
|
|
DropdownMenuItem(
|
|
text = { Text(option.name, style = MaterialTheme.typography.bodyLarge) },
|
|
onClick = {
|
|
selected = option
|
|
expanded = false
|
|
onSelect(selected)
|
|
},
|
|
contentPadding = ExposedDropdownMenuDefaults.ItemContentPadding,
|
|
)
|
|
}
|
|
}
|
|
}
|
|
} |