0

からイベントを収集しようとしています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)すべてが正しく機能します。

私が間違っていない限り、すべてのイベントを発行順に発行する必要があります。それは予想される動作ですか?ドキュメントで何かを見逃していましたか? または私は何か間違っていますか?

4

0 に答える 0