からイベントを収集しようとしていますflow
。
ビューモデル
val events = MutableStateFlow<HomeEvent>(HomeEvent.Empty)
val uiEvents: StateFlow<HomeEvent> = events
private suspend fun emitEvent(homeEvent: HomeEvent) {
events.emit(homeEvent)
}
private fun downloadHomeData() {
viewModelScope.launch(dispatchers.io + exceptionHandler) {
longRunningTaskSync()
emitEvent(HomeEvent.DisplayHomeAnimation())
longRunningTaskSync2()
emitEvent(HomeEvent.DisplayProgressiveLoadingImages())
longRunningTaskSync3()
emitEvent(HomeEvent.DisplayTitles())
emitEvent(HomeEvent.DisplayProgressiveLoadingPosts())
emitEvent(HomeEvent.DisplayProgressiveLoadingComments())
emitEvent(HomeEvent.DisplayKpi())
}
}
ホームフラグメント
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
try {
viewModel.uiEvents.collect { event ->
when (event) {
is HomeEvent.DisplayHomeAnimation -> { }
is HomeEvent.DisplayProgressiveLoadingImages -> { }
is HomeEvent.DisplayKpi -> { }
is HomeEvent.DisplayTitles -> { }
is HomeEvent.DisplayProgressiveLoadingPosts -> { }
is HomeEvent.DisplayProgressiveLoadingComments -> { }
is HomeEvent.Empty -> { }
}
}
} catch (t: Throwable) {
}
}
}
}
上記の例では、MutableStateFlow
いくつかのイベントの発行に失敗しています。しかし、連続する排出の間に を入れるたびに、delay(200)
すべてが正しく機能します。
私が間違っていない限り、すべてのイベントを発行順に発行する必要があります。それは予想される動作ですか?ドキュメントで何かを見逃していましたか? または私は何か間違っていますか?