Kristy Welsh
Kristy Welsh

Reputation: 8520

Can't collect StateFlow in Activity

I am just learning StateFlow. I have a simple StateFlow to observe:

private val _userClickedAction = MutableStateFlow( Event(false))
val userClickedAction: StateFlow<Event<Boolean>> = _userClickedAction.stateIn(
    scope = viewModelScope,
    started = WhileSubscribed(5000),
    initialValue = Event(false)
)

I'm trying to observe it in an activity like this:

    lifecycleScope.launch {
        repeatOnLifecycle(Lifecycle.State.STARTED) {
            valuePropViewModel.userClickedAction.collect {
                
              valuePropViewModel.actionContext.runActionNamed(SECOND_OPTION_SELECTED)
            }
        }
    }

It won't compile, I am getting the compile error:

Type mismatch. Required: FlowCollector<Event<Boolean>> Found: () → Unit

I'm using:

// Lifecycle components

implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"

implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"

implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"

implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

Where $lifecycle_version = 2.4.0

Upvotes: 1

Views: 1494

Answers (1)

Kristy Welsh
Kristy Welsh

Reputation: 8520

Apparently, I was using the wrong version of collect.

implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.0-beta01")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")

import kotlinx.coroutines.flow.collect 

Type mismatch inferred type is () -> Unit but FlowCollector<Int> was expected

Upvotes: 1

Related Questions