У меня есть класс Dao, который возвращает список объектов Car в виде потока.
@Query("SELECT * FROM Car")
fun getAllCars(): Flow<List<Car>>
В моем хранилище я могу использовать этот Dao следующим образом
fun getAllCars(): Flow<List<Car>>
//Implementation
override fun getAllCars() = carDao.getAllCars()
I можно наблюдать это flow
в представленной модели и все работает и жизнь была в порядке.
Теперь, прочитав пост на Разработчик Android Сайт о
Общий c класс, который содержит данные и статус о загрузке этих данных.
Я вдохновился, поэтому прочитал еще один пост здесь , в котором обсуждается наличие класса Result.
Итак, я внес некоторые изменения в хранилище и не могу их решить.
Ошибка:
suspend fun getSomeData(): Flow<Result<List<Car>>> {
carDao.getAllCars().collect {
if (it.isNotEmpty()) {
return flowOf(Result.Success(it)) //<-- Here I am getting error from IDE
}
else {
val throwable = Throwable()
return flowOf(Result.Failure<List<Car>>(throwable)) //<-- Here I am getting error from IDE
}
}
}
Ошибка Return is not allowed here
и Change to 'return@Collect'
Чего я хочу добиться:
// At view model side
viewmodelScope.launch {
repo.getSomeData().collect {
if (it == Result.Success) {
//Show data
}
else {
//Show empty screen
}
}
}
Не верен ли мой подход к реализации Результата? Я не могу понять, что не так. Почему я не могу просто вернуть Поток из потока