Pablo
08/11/2025, 5:13 PMPablo
08/11/2025, 5:13 PM@Composable
fun AutoCompleteTextField(
modifier: Modifier = Modifier,
suggestions: List<String>,
label: String,
readOnly: Boolean = false,
onItemSelected: (String) -> Unit
) {
var query by rememberSaveable { mutableStateOf("") }
var expanded by rememberSaveable { mutableStateOf(false) }
var textFieldSize by remember { mutableStateOf(Size.Zero) }
val filteredSuggestions = suggestions.filter {
it.contains(query, ignoreCase = true) || query.isBlank()
}
Column(modifier = modifier) {
OutlinedTextField(
value = query,
onValueChange = {
query = it
expanded = true
},
label = { Text(label) },
modifier = Modifier
.fillMaxWidth()
.onGloballyPositioned { coordinates ->
textFieldSize = coordinates.size.toSize()
},
trailingIcon = {
Icon(
imageVector = if (expanded) Icons.Default.KeyboardArrowUp else Icons.Default.KeyboardArrowDown,
contentDescription = null,
modifier = Modifier.clickable { expanded = !expanded }
)
},
readOnly = readOnly,
singleLine = true
)
DropdownMenu(
expanded = expanded && filteredSuggestions.isNotEmpty(),
onDismissRequest = { expanded = false },
modifier = Modifier
.width(with(LocalDensity.current) { textFieldSize.width.toDp() })
) {
filteredSuggestions.forEach { suggestion ->
DropdownMenuItem(
onClick = {
query = suggestion
expanded = false
onItemSelected(suggestion)
},
text = { Text(suggestion) }
)
}
}
}
}
Chrimaeon
08/11/2025, 6:40 PM