ARTICLE AD BOX
I'm trying to pass a click handler to a child function that sends a string back to the parent and updates a mutable value based on the string. I'm getting an error on the function:
"Assignment type mismatch: actual type is 'Unit', but 'String' was expected."
The function doesn't return anything, it just updates the selectedColor
Code:
@Composable fun ColorsSection() { val colors: List<Pair<String, Color>> = listOf( "Red" to Color.Red, "Pink" to tertiaryContainerLightMediumContrast, "Orange" to errorContainerDarkMediumContrast, "Yellow" to Color.Yellow, "Green" to Color.Green, "Cyan" to Color.Cyan, "Blue" to Color.Blue, "Purple" to tertiaryLight, "White" to Color.White ) var selectedColor by remember { mutableStateOf("") } val onSelectColor: (color: String) -> Unit = { selectedColor = color } // Assignment type mismatch: actual type is 'Unit', but 'String' was expected. LazyColumn(modifier = Modifier) { items(items = colors) { color -> SingleColor( color.first, selectedColor, color.second, onSelectColor ) } } } @Composable fun SingleColor( colorName: String, selectedColor: String, colorValue: Color, onSelected: (String) -> Unit ) { Surface( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp, vertical = 8.dp) .clickable(onClick = { onSelected(colorName) }), shape = MaterialTheme.shapes.medium, border = BorderStroke( 1.dp, if (selectedColor == colorName) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.outline ), color = if (selectedColor == colorName) MaterialTheme.colorScheme.primaryContainer else MaterialTheme.colorScheme.surface ) { Row( modifier = Modifier .fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween ) { Box( modifier = Modifier .size(60.dp) .background(colorValue) ) Text( text = colorName, modifier = Modifier .weight(1f) .padding(horizontal = 16.dp), style = MaterialTheme.typography.headlineSmall, textAlign = TextAlign.Center ) RadioButton( selected = selectedColor == colorName, modifier = Modifier.padding(8.dp), onClick = null ) } } }