В следующем Composable список отображается, и я хочу разрешить добавление новых и удаление существующих адресов электронной почты. >
Уменьшенный до минимума Composable выглядит следующим образом:
Код: Выделить всё
@Composable
fun EmailList(p: Person) {
var emails = remember(p.emails.size) { mutableStateListOf(*p.emails.toTypedArray()) }
Row() {
Button(onClick = { p.emails.add(Email()) }) { Text("add") }
Button(onClick = { p.emails.removeAt(0) }) { Text("delete") }
}
emails.forEach { email ->
Text(email.toString())
}
}
Единственный способ — добавить/удалить новый элемент в локальном списке:
Код: Выделить всё
@Composable
fun EmailList(p: Person) {
var emails = remember(p.emails.size) { mutableStateListOf(*p.emails.toTypedArray()) }
Row() {
Button(onClick = { Email().also{p.emails.add(it);emails.add(it) }}) { Text("add") }
Button(onClick = { p.emails.removeAt(0); emails.removeAt(0) }) { Text("delete") }
}
emails.forEach { email ->
Text(email.toString())
}
}
Более того, когда я просматриваю разные объекты людей, список адресов электронной почты обновляется если у предыдущего человека другое количество адресов электронной почты, и оно остается неизменным (что, конечно, нежелательно, а является лишь проблемой в моем минимизированном примере), если количество электронных писем одинаково для текущего и предыдущего объекта людей.Похоже, что ключ p.list.size имеет эффект, если входящий объект person изменяется, но это не имеет никакого эффекта, если изменяется только размер списка.
Я знаю, что могу определить список в своем классе Person как MutableStateList. Но похоже, что я путаю бизнес-логику с особенностями пользовательского интерфейса.
Подробнее здесь: https://stackoverflow.com/questions/792 ... s-expected