функция, назовём её 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, на случай, если надо начать, к примеру, со второго типа.
Спасибо! Это, фактически, то что нужно🤟
Обсуждают сегодня