以下是我在使用Flow
时的尝试。我在onStart
中展示了一个ProgressBar
,并试图在onCompletion
中隐藏它。
在ViewModel类中,appDatabase.eventDao().getAllEvents()
返回的是Flow<List<EntityEvents>
@ExperimentalCoroutinesApi
val allEvents: LiveData<Outcome<List<Event>>> = _fetchEvents.switchMap { _ ->
appDatabase.eventDao().getAllEvents()
.map { eventListMapper.map(it) }
.map { sortEventsBasedOnPreference(it) }
.flowOn(Dispatchers.IO)
.map { Outcome.success(it) }
.onStart { emitLoading(true) }
.onCompletion { emitLoading(false) }
.catch { emitFailure(it, R.string.err_something_wrong) }
.asLiveData(context = viewModelScope.coroutineContext)
}
一切都正常,但我无法弄清楚为什么当任务完成时onCompletion
没有被调用?
flow
完成时,onCompletion
不应该被调用吗?我的目标是在onStart
和onCompletion
操作符中分别显示和隐藏ProgressBar
。 - Hussain