Как правильно подойти к вопросу: compose: как отобразить mutable список из mutable объектов?
Изучаю Compose
По вводным: загружаю по api список заказов - обычныe POJO
По вводным: далее я отображаю его в LazyColumn
Далее список может меняться, и нужно все это отобразить.
По вводным: тут вроде все просто - делаем mutableListOf - и compose сам все отрисует
По вводным: но помимо списка, может меняться и сам заказ (например, фоновая служба может изменить его статус)
Нужно понять: и вот как отрисовать это изменение?
Нужно понять: на ум приходят либо использовать key либо заворачивать каждый параметр заказа в mutable переменную, но может есть более принятый способ?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В Jetpack Compose mutable список из mutable объектов часто не перерисовывается, потому что Compose отслеживает изменения состояния, а не произвольные мутации внутри обычного объекта. Если вы меняете поле объекта внутри списка, но ссылка на список и объект остаётся той же, Compose может не понять, что нужно обновить UI.
Лучший путь — делать состояние иммутабельным: хранить список data class и при изменении создавать новый список с изменённым элементом.
Если нужен изменяемый список, используйте
mutableStateListOf, но всё равно лучше заменять элемент целиком:Плохой вариант:
Если
checked— обычное поле, Compose не увидит изменение. Можно делать поля какmutableStateOfвнутри объекта, но это усложняет модель и часто хуже для поддержки.В
LazyColumnобязательно задавайте стабильный key:Итог: не мутируйте обычные поля объектов внутри списка. Используйте immutable data class + copy или
mutableStateListOfс заменой элемента. Так Compose стабильно увидит изменение и перерисует нужную строку.