У меня есть список элементов ниже, рядом с каждым элементом которого есть флажок в виде кнопки. Если кнопка не выбрана, должен отображаться черный пустой кружок. Когда кнопка нажата, внутри черного круга должна быть галочка.
При запуске кода и просмотре журналов отладки модель представления обновляется, однако мое представление — нет. Чего не хватает?
data class ListItem(
var title: String,
var checked: Boolean
)
class ItemsViewModel: ViewModel() {
private var _reportDetails: MutableStateFlow = MutableStateFlow(mutableListOf())
val reportDetails = _reportDetails.asStateFlow()
private var _issues: MutableStateFlow =
MutableStateFlow(mutableListOf(
ListItem(title = "Item 1", checked = false),
ListItem(title = "Item 2", checked = false),
ListItem(title = "Item 3", checked = false),
ListItem(title = "Item 4", checked = false),
ListItem(title = "Item 5", checked = false),
ListItem(title = "Item 6", checked = false),
ListItem(title = "Item 7", checked = false),
ListItem(title = "Item 8", checked = false),
ListItem(title = "Item 9", checked = false)
))
val issues = _issues.asStateFlow()
fun addToReportDetails(reportDetail: String) {
_reportDetails.update {
it.add(reportDetail)
return
}
}
fun removeFromReportDetails(reportDetail: String) {
_reportDetails.update {
it.remove(reportDetail)
return
}
}
fun updateOnlineIssuesAtIndex(index: Int, checked: Boolean) {
_issues.update {
it[index].checked = checked
return
}
}
}
@Composable
fun ReportView(
itemsViewModel: ItemsViewModel,
) {
val reportDetails by itemsViewModel.reportDetails.collectAsStateWithLifecycle()
val issues by itemsViewModel.issues.collectAsStateWithLifecycle()
LazyColumn(
modifier = Modifier
.padding(50.dp)
) {
item {
for ((index, issue) in issues.withIndex()) {
Column(
verticalArrangement = Arrangement.spacedBy(5.dp),
) {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(10.dp)
) {
Text(text = issue.title)
Button(
onClick = {
if (!issue.checked) {
itemsViewModel.updateOnlineIssuesAtIndex(index = index, checked = true)
itemsViewModel.addToReportDetails(issue.title)
Log.d("ReportUser", "reportDetails = $reportDetails")
Log.d("ReportUser", "issue.checked = ${issue.checked}")
} else {
itemsViewModel.updateOnlineIssuesAtIndex(index = index, checked = false)
itemsViewModel.removeFromReportDetails(issue.title)
Log.d("ReportUser", "reportDetails = $reportDetails")
Log.d("ReportUser", "issue.checked = ${issue.checked}")
}
}
) {
Box(
modifier = Modifier
.size(25.dp)
.border(
width = 1.dp,
color = Color.Black,
shape = CircleShape
)
) {
if (issue.checked) {
Icon(
imageVector = Icons.Rounded.CheckCircle,
contentDescription = "null",
modifier = Modifier.size(25.dp),
tint = Color.Black,
)
}
}
}
}
}
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... -viewmodel