sample
🧩 Syntax:
@Composable
fun ListScreen(list: MutableList<Person>, modifier: Modifier = Modifier) {
val (stateList, updatedState) = remember { mutableStateOf(list) }
LazyColumn(modifier = modifier.fillMaxSize()) {
items(stateList, key = { it.name }) { person ->
PersonItem(person) { status ->
val updatedPerson = person.copy(isChecked = status)
val newList = stateList.toMutableList()
newList[stateList.indexOf(person)] = updatedPerson
updatedState.invoke(newList)
}
}
}
}
@Composable
fun PersonItem(
person: Person = Person(),
modifier: Modifier = Modifier,
callback: (status: Boolean) -> Unit,
) {
Card(
modifier = modifier
.fillMaxWidth()
.padding(4.dp),
border = BorderStroke(1.dp, Color.Black),
shape = RoundedCornerShape(5.dp),
colors = CardDefaults.cardColors(
if (person.isChecked)
Color.Blue
else
Color.Gray
)
) {
Row(
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.padding(
vertical = 16.dp
),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start
) {
Checkbox(checked = person.isChecked, onCheckedChange = {
callback.invoke(it)
})
Text(text = person.name)
}
}
}
data class Person(
val name: String = "ahmad",
var isChecked: Boolean = false,
)
fun provideList(): MutableList<Person> {
return mutableListOf(
Person("ali", false),
Person("mojtaba", true),
Person("drog", false),
)
}