функция, назовём её getFlow, которая возвращает Flow в зависимости от переданного в него условия, пусть это будет некий enum.
private fun getFlow(type: Type): Flow<Int> {
return when (type) {
FIRST_TYPE -> repo1.reloadFirstType()
SECOND_TYPE -> repo2.reloadSecondType()
THIRD_TYPE -> repo3.reloadThirdType()
}
}
В этой функции из разных репозиториев получаются Flow: это запросы в сеть, которые делаются постранично, результаты обрабатываются в репозиториях, а наружу — просто отдаётся процент выполнения.
В эту функцию в самом начале я передаю FIRST_TYPE, а потом мне нужно после условия, что число = 100, вызвать getFlow со следующим типом.
Дело в том, что у меня одна подписка на Flow
var progressFlow = getFlow(FIRST_TYPE)
Вопрос: как можно сделать в данном случае переход от первого Flow ко второму?
Порядок заранее известен? FIRST_TYPE -> SECOND_TYPE -> THIRD_TYPE?
Да, порядок я могу определить. И мне важно, чтобы этот порядок сохранялся
Мне кажется тебе нужно что-то вроде этого: val progressFlow = arrayOf(FIRST_TYPE, SECOND_TYPE, THIRD_TYPE) .asFlow() .flatMapConcat { type -> getFlow(type) .filter { it == 100 } }
Только по дороге надо ещё вставить, похоже, dropWhile, на случай, если надо начать, к примеру, со второго типа.
Спасибо! Это, фактически, то что нужно🤟
Обсуждают сегодня