Перенесите загрузку и изменение списка в владельца состояния экрана. ProductItem должен получать готовые данные и callbacks, а FAB — отправлять событие добавления.
Как разделить состояние списка товаров в Compose?
Перенесите загрузку и изменение списка в владельца состояния экрана. ProductItem должен получать готовые данные и callbacks, а FAB — отправлять событие добавления.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Экран Compose показывает товары через LazyColumn и ProductItem. Сейчас каждая строка сама загружает цену из сети, а FAB напрямую меняет обычный MutableList. После добавления товара список иногда не обновляется, повторная композиция запускает новые запросы. Предложите рефакторинг.
Ответ
Перенесите загрузку и изменение списка в владельца состояния экрана. ProductItem должен получать готовые данные и callbacks, а FAB — отправлять событие добавления.
Владелец состояния, например ViewModel, публикует неизменяемый снимок списка вместе с состояниями loading/error. Сетевой слой работает через repository, а не из тела composable. LazyColumn получает элементы со стабильными ключами id; ProductItem отображает переданный товар. Изменения создают новый наблюдаемый state, поэтому обычная мутация незаметного MutableList больше не теряется. Побочные эффекты запускаются с контролируемым жизненным циклом, а не при каждом построении строки.
Источник: developer.android.com.