Как скрестить два Flow чтобы чтобы запустить их значения как два аргумента в suspend-функцию, возвращающую String?
Раньше, когда метод из вьюМодели "suspend fun getCategoryName(categoryNumber: Int)" содержал только один аргумент categoryNumber: Int, я его запускал из фрагмента так:
In Fragment:
viewModel.categoryNumber.observe(viewLifecycleOwner) {
viewLifecycleOwner.lifecycleScope.launch {
(activity as MainActivity).supportActionBar?.title = viewModel.getCategoryName(it)
}
}
Сейчас я добавил второй аргумент NativeLanguage, и не пойму как мне "скрестить" их чтобы запускать из Фрагмента одним методом. Кто сможет подсказать? буду благодарен за помощь.
Я пытался что-то такое написать:
suspend fun catName(): String = combine( catNumFlow, natLangFlow ) { cN, nL ->
Pair(cN, nL)
}.flatMapLatest { (cN, nL) ->
wordDao.getCategoryName(cN, nL)
}
Но здесь type mismatch, потому что Dao метод - это suspend fun который возвращает String, а комбинирование Flow-ов дает Flow. Подскажите плиз как это правильно написать. Буду благодарен за помощь.
In ViewModel:
val catNumFlow = preferencesManager.categoryNumberFlow // returns Flow<Int>
private val natLangFlow = preferencesManager.nativeLanguageFlow // Flow<NativeLanguage> (enum)
suspend fun getCategoryName(categoryNumber: Int, nativeLanguage: NativeLanguage) = wordDao.getCategoryName(categoryNumber, nativeLanguage)
My Dao query:
suspend fun getCategoryName(categoryNumber: Int, nativeLanguage: NativeLanguage) =
if (categoryNumber != 0) {
when (nativeLanguage) {
NativeLanguage.RUS -> getCategoryNameRus(categoryNumber)
NativeLanguage.ENG -> getCategoryNameEng(categoryNumber)
}
} else {
when (nativeLanguage) {
NativeLanguage.RUS -> "Все категории"
NativeLanguage.ENG -> "All categories"
}
}
@Query("SELECT categoryNameRus FROM category_table WHERE categoryNumber = :categoryNumber")
suspend fun getCategoryNameRus(categoryNumber: Int): String
@Query("SELECT categoryNameEng FROM category_table WHERE categoryNumber = :categoryNumber")
suspend fun getCategoryNameEng(categoryNumber: Int): String