协程 StateFlow.collect{} 未触发

Coroutine StateFlow.collect{} not firing

我看到一些奇怪的行为。我的 ViewModel 中有一个简单的 StateFlow<Boolean>,它没有被收集到片段中。定义:

private val _primaryButtonClicked = MutableStateFlow(false)
val primaryButtonClicked: StateFlow<Boolean> = _primaryButtonClicked

这里是我设置值的地方:

fun primaryButtonClick() {
    _primaryButtonClicked.value = true
}

这是我收集它的地方。

     repeatOnOwnerLifecycle {
        launch(dispatchProvider.io()) {
            freeSimPurchaseFragmentViewModel.primaryButtonClicked.collect {
                if (it) {
                    autoCompletePlacesStateFlowModel.validateErrors()
                    formValidated = autoCompletePlacesStateFlowModel.validateAddress()
                    if (formValidated) {
                        freeSimPurchaseFragmentViewModel
                            .sumbitForm(autoCompletePlacesStateFlowModel.getStateFlowCopy())
                    }
                }
            }
        }
     }

repeatOnOwnerLifecycle:

inline fun Fragment.repeatOnOwnerLifecycle(
    state: Lifecycle.State = Lifecycle.State.RESUMED,
    crossinline block: suspend CoroutineScope.() -> Unit
) {
    viewLifecycleOwner.lifecycleScope.launch {
     repeatOnLifecycle(state) {
        block()
   }
}

我做错了什么?收集器从不触发。

这有意义吗?

val primaryButtonClicked: StateFlow<Boolean> = _primaryButtonClicked.asStateFlow() 

我也无法理解内联函数部分,因为在幕后似乎你写了这样的东西

viewLifecycleOwner.lifecycleScope.launch {
   viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) {
      launch(dispatchProvider.io()) {
        freeSimPurchaseFragmentViewModel.primaryButtonClicked.collect {
            if (it) {
                autoCompletePlacesStateFlowModel.validateErrors()
                formValidated = autoCompletePlacesStateFlowModel.validateAddress()
                if (formValidated) {
                    freeSimPurchaseFragmentViewModel
                        .sumbitForm(autoCompletePlacesStateFlowModel.getStateFlowCopy())
                }
            }
        }
     }
   }
}

为什么要在另一个协程中启动一个协程并从 IO 调度程序收集流?您需要从主调度程序收集值。