model = ImageRequest.Builder(context)
.data(vm.getAvatarImage(roomData.avatarUrl))
.build()
)
Попробуй другую либу, поймёшь, к примеру глайд
не хочется. я думаю мультиплатформу подтянуть, когда разберусь полностью со структурой приложения
Вроде нормально coil работает. Попробуй asyncimage на всякий случай, вдруг рекомпозиции происходит. И передай все же url, может там проблема
Мб рекомпозиции, но как на зло не работает лейаут инспектор
оказывается при скролле код выполнялся заново потому что лейзи лист
попробуй завернуть ImageRequest.Builder(context) .data(vm.getAvatarImage(roomData.avatarUrl)) .build() в remember(key1 = roomData.avatarUrl) { ... } А ещё я надеюсь что vm.getAvatarImage() не качает картинку и возвращает обратно битмап. Если оно действительно её качает, то нужно это по другому делать.
Оно как раз оно так и делало (либо качало, либо брало из памяти). Я сделал мапу и теперь гружу в нее по айдишнику, и потом по айдишнику беру
ты можешь просто roomData.avatarUrl в ImageRequest.Builder.data(...) передавать.
Нет, потому что ссылка специфична для сервиса, и ее нужно разбирать на куски и собирать используя данные из другого источника. В сдк для этого уже есть готовый инструмент, поэтому не хочу колесо изобретать
При каждой рекомпозиции ImageRequest создаётся заново. ImageRequest.Builder нужно ремемберить отдельно внутри rememberAsyncImagePainter
А ты кеш не включил потому что loader передавал🤷♂ Но странно, элемент экран не покидал, видимо что-то у тебя дёргает рекомпозиции в самом итеме (может лямбду передал, может что не стабильное)
Да не, это просто так работает лейзи колумн. У меня все обвернуто в ремемберы, логики в уи нет кроме формата даты и иконки статуса сообщения
Не работает так lazy, при scroll рекомпозиции не вызываются, только если пропал/зашёл на экран, но по видео не та ситуация
Так это и не рекомпозиция. В лейаут инспекторе ничего нет. Во время скролла в композабле не происходит ничего совершенно,
Но тогда почему asynkrememberpainter перезапускается? Т.е. он грузит картинку, она мигает и по новой. Это жжж не спроста...
Тот же вопрос. Я в сам композабл лог д вставил и в логах увидел, что на каждое изменения оффсета он выполнялся
Вот, это же и есть рекомпозияция. А всю функцию можешь выложить?
https://gist.github.com/Number869/04cbefc0e9c7082e624f5b81ccd49fd3
Room же не стабильный, попробуй передать статичный url или обернуть room в дата класс и пометить как stable
Я в лейзи листе, где вызываю этот айтем, убрал сам айтем и поставил лог д. В логах то же самое. Что-то сделал не то, где вызывал сам айтем. Ща методом исключения выясню
Там из-за лаунчд эффекта эта проблема, как минимум частично, оказывается, даже если он ничего не делал кроме проверки одного булеан значения
Надо править в общем. Проблема не в painter🤷♂
Получается так. Спасибо за наводку👍
оказалось это не рум нестабильный, а лукахед скоуп
Но рум по идее тоже нестабильный...
А где именно и как этот соус используется?
Не, он как раз таки стабильным оказался. Его передача как параметр не вызывает иекомпозиций
Я скоуп передаю потому что у меня анимации сложные. Я из комплзабла в композабл элементы передаю
Так scope же внутри получить можно. Зачем его передавать?🧐 И в примере его нет🤷♂
Нельзя. Будет проблема с инстансами и анимации по итогу не будет
Я не очень понимаю что ты делаешь. Ты scope в composable прокидываешь или modifier свой используешь?
Я прокидываю скоуп. Он нужен и модифаеру, и комозаблам внутри, поскольку в них тоже есть элементы зависящие именно от этого скоупа. Через контекст я вопрос рекомпозиций от передачи скоупа как параметра решил. Остался вопрос как избежать рекомпозиций при скролле от использования модифаеров лейаута
Если modifier кастомный можно отнаследовать от element вроде, там есть scope
Не совсем понимаю о чем речь
Обсуждают сегодня