Вступить в клуб →
средняявопросJetpack Compose и состояние экрана

Добавление в список внутри потока состояния не обновляет экран

Во ViewModel корзины написано:

private val _items = MutableStateFlow(mutableListOf<Item>())
val items: StateFlow<List<Item>> = _items

fun add(item: Item) {
    _items.value.add(item)
}

Экран собирает поток и рисует список, но после добавления товара ничего не меняется. В чём причина?

  • Код упадёт с ConcurrentModificationException при первом же добавлении, потому что этот же список одновременно читает подписчик
  • Значение потока не менялось: value указывает на тот же объект списка, поэтому подписчиков никто не уведомляет
  • Обновление придёт только если собирать поток с учётом жизненного цикла экрана, иначе первые значения теряются
  • Обновление придёт, но с задержкой в один кадр отрисовки, и на быстрых добавлениях это выглядит как пропажа товара

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела