import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
@Composable
fun DerivedStateScreen() {
val name = remember { mutableStateOf("") }
// Derived state for greeting message
val greeting by remember {
derivedStateOf {
if (name.value.isNotBlank()) "Hello, ${name.value}!" else "Hello!"
}
}
Column(modifier = Modifier.padding(16.dp)) {
Text(text = "Enter your name:")
TextField(
value = name.value,
onValueChange = { name.value = it },
modifier = Modifier.padding(vertical = 8.dp)
)
Text(text = "Greeting:")
Text(text = greeting, style = MaterialTheme.typography.bodyLarge)
}
}We use mutableStateOf to hold the user's input name. The derivedStateOf creates a new state that depends on name.value. It updates automatically when the name changes, producing a greeting message. This way, the UI updates efficiently only when the derived greeting changes. The greeting is shown below the TextField, showing 'Hello, [Name]!' if the user typed a name, or just 'Hello!' if empty.