с сервака корутиной. Костыль запилил через бэкграунд Row.
Что делает Request.getDiameter? В принципе ничего не мешает держать экземпляр mutableStateOf(0.dp) где-то рядом с тем местом где происходит обработка ответа с сервера (view model или где-нибудь ещё) и потом просто использовать его напрямую в компзабл функции.
getDiameter выборка значений с бд сервера по корутине. надеялся что есть какойнить update в компонентах с мутабл параметром bool
Мда, это даже хуже чем я подумал :) и вы правы - так делать не стоит. Композабл функция теоретически может вызваться на каждый кадр и вы точно не хотите чтобы у вас запрос на сервер летел каждый кадр.
Поэтому вам надо определиться когда вы хотите вызывать Request.getDiameter() и делать это вне композабл функции
судя по логам вызывается только при обновлении dp. Или оно рпоизвольно может начать вызывать каждый фрейм этот компонент ?
Композ делает кучу оптимизаций для того чтобы не делать лишнего если не надо но эти оптимизации ничего не знают о ваших задачах. К примеру если вы положите этот компонент в скроллируемый список и попробуете его поскроллить - вот тогда вы скорее всего увидите запрос на каждый кадр :)
так и есть. В скролируемом списке )) Не учел
Так что давайте разберёмся - что вы таки хотите и когда
При запуске приложения нужно данное обращение на сервер + при изменении данных с сервера толкать их обратно
"запуск приложения" это когда? Активити ваше на экране или прям Application.onCreate? У вас там где-нибудь поблизости вьюмодель есть?
Когда на экране. БД типа склад. 1) Получаем диамерты продукта. 2) Получаем номера продукта по кликнутому диаметру. 3) В каждом номере возможны изменения юзером. Все пункты = запросы к бд В бэкэнде я полный ноль...
Ох :) ладно попробуем продраться Для начала... объясните что делает вот эта строка: Request.getDiamter(list = list) { d:Int -> p = d.dp } Метод getDiameter идёт на сервер... и вероятно мутирует list который вы ему передаёте, но зачем ему ещё и коллбек? и что такое в этом коллбеке d?
Почему запрос на сервер происходит при каждой композиции?
Ну а откуда компоуз знает что вот именно этот вызов функции не надо делать?
Думаю что стоит начать с самых основ доки, thinking in compose
Да, мутирует. Но при его мутации обновления нет. d в колбэке это костыль из-за которого и был задан вопрос изначально. Это мутант модификатора padding от Row в который кладется список. Пока не добавил этот костыль - не обновлялось. Хотя возможно я что-то не то делал. Про запрос: Он в композабл функции, но выше всяких Row. И судя по логам не вызывается. Обновляется конкретно Row
Потому что надо во вьюмодели это вызывать Но можно пока внутрь LaunchedEffect(Unit) засунуть
Про костыль понятно. Костыль не нужен. То что запрос "в композабл функции" э... Т.е. Request.getDiameter() это композабл функция? Не надо так делать :) Композабл функции не должны заниматься общением с бекендом напрямую ни в каком виде - их задача смотреть на стейт и рисовать его. Покажите код этого вашего getDiameter.
Женька Вартанов поспорил бы с тобой🙂
Попозже. На работе
Кто такой - почему не знаю :))
Я тоже не знаю, почему ты не знаешь)
Обсуждают сегодня