Это во ViewModel. По нажатию на ячейку в ресайклере происходит переход на детальный фрагмент, через бандл передаю айдишник, внутри фрагмент инжекчу ViewModel с помощью viewModel { parametersOf(id) }, во вьюмодели нужно скачать JSON и далее передать сформировать из этой appeal StateFlow.
Если я делаю async { … }.await() внутри viewModelScope.launch я не успею дождаться ответа (такова работа launch), при этом await() либо join() у джобы suspend-функции, я хз внутри запуска которой корутины мне запускать
up
У меня была подобная проблема. Мне после отработки одного запроса на скачку джсона надо было у некоторых результатов сделать дополнительный запрос к другому вебу. Я решил так. В функцию запуска первого запроса добавил коллбэк для запуска второго. Этот второй запускал внутри withViewModelContext. В таком случае результат уже приходит полностью готовый. У меня встречный вопрос, что такое parametersOf? Обёртка над фабрикой вью модели?
Наверное да, мне надо инжектить зависимость из вью в вьюмодел
Давай в лс, мне кажется у тебя другой юзкейс
да через лайв дату прокидывай да и всё, fun onClick() = liveData { // получаешь данные emit(data) }
Эм шта)
ну если тебе при создании нужно прокинуть результат, то её в полях класса, либо я твой кейс не понял, просто запускать runBlocking в init да и вообще во вьюмодели, да и вообще в андроиде выглядит страшно
Зырь
Во вьюмодель прокидываю айдишник, нужно в момент инициализации передать юзкейсу, сделать запрос на сервер, дождаться его, спарсить, а потом передать его в StateFlow во вьюмодели
так и сделай viewModelScope.launch { val data = useCase.request(id) stateFlow.value = data }
А начальное значение StateFlow какое? Нулл?
логично, его нет)
Так а MutableStateFlow надо задавать обязательно
Про runBlocking согласен
Обсуждают сегодня