в избранное
через ивент передаю id элемента, в блоке в списке моделей меняю у нужного елемента bool на обратный и делаю емит
но на экране ничего не меняется, пока я не прокручу от выбранного елемента список и не вернусь обратно - тогда вижу изменения
куда копать, чтобы сразу менялось?)
Яснопонятно, что вы , что то перемудрили с менеджером состояний. Если хотите, что бы вам детальнее подсказали, вам придётся прикрепить screenshot
Стейт блока не изменяется сразу по клику на евент - вероятно с точки зрения блока это тот же стейт . Возможно это происходит потому что в классе стейта надо в переопределенном методе props[...] (предварительно подключив либу equatable )- добавить в список все свойстве стейта. В вашем случае объект модели в стейте. Порой эта причина не обновления стейта
Ключи на элементы списка добавь
Где ключ это ValueKey(item)
добавлял, и для элементов и для ListView.builder сейчас ситуация, что я меняю в списке значение bool у нужного элемента емичу новый список, емит срабатывает, но скринт не ребилдится Но, в то же время, после прокрутки ListView.builder я вижу изменения))
А ты копируешь список или изменяешь?
на данный момент, мне нужно брать список из стейта (сейчас буду переписывать, если не придумаю как заставить это заработать) _changeFavorites(HomeChangeFavoritesEvent event, emit) { if (state is HomeInitialState) { List<MatchModel> newList = [...(state as HomeInitialState).matchList]; ... emit(HomeInitialState(matchList: newList)); }
Ключи для элементов пропиши
не решение, но просто улучшение. используй List.of() что бы копировать лист в памяти
А покажи как ключи на элементы списка вешаешь, там точно проблема с ключами
В ключе удали matchId и всё должно заработать
передавать index&
ValueKey(homeState.matchList[index])
передать объект в ключ? это норм практика?
Для этого специальные ключи есть... Такое используется когда данные не могут идентифицироваться элементарным свойством
А таки ты данные элемента меняешь, значит надо уведомлять элемент на ребилд, а не с ключами возиться или что-то ещё...
Ключи нужны когда ты добавляешь элементы в середину списка, Удаляешь из середины списка... А не когда сами элементы меняешь данные (так что элемент остаётся тем же)
Тут немного не понял Как уведомлять элемент на ребилд?
Обсуждают сегодня