使用MutableStateFlow作为热流,Kotlin Android

使用MutableStateFlow作为热流,Kotlin Android,android,kotlin-coroutines-flow,Android,Kotlin Coroutines Flow,我正在从LiveData迁移到Flow,并面临以下问题: 我在viewModel中有一个流 class MyViewModel() : ViewModel() { val state = MutableStateFlow<Boolean>(false) } class FirstFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { su

我正在从LiveData迁移到Flow,并面临以下问题:

我在viewModel中有一个流

class MyViewModel() : ViewModel() {
   val state = MutableStateFlow<Boolean>(false)
}

class FirstFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    lifecycleScope.launchWhenCreated {
        viewModel.loginPresenterState.startVerifyFragmentEvent.collectLatest {
            Log.d("Nurs", "loginPresenterState $it")
            if (it)
                findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
        }
    }
}
class MyViewModel():ViewModel(){
val状态=可变状态流(false)
}
类FirstFragment:Fragment(){
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
生命周期示波器。在创建时启动{
viewModel.LoginPresentState.startVerifyFragmentEvent.collectLatest{
Log.d(“Nurs”、“LoginPresentState$it”)
如果(它)
findNavController().导航(R.id.action\u FirstFragment\u到\u SecondFragment)
}
}
}
}

当这个流被触发时,我的第一个片段导航到另一个片段“B”。
但当我按下后退按钮时,
状态
再次触发,而不是导航到FirstFragment,而是返回到“B”。我想这是因为流动是冷的。如何管理它只能调用一次?

可能是因为状态保持不变,当您返回时,它会重新观察状态并进行导航。检查本文并使用本文中提到的EventWrapper。他使用了livedata,但同样的逻辑也适用于stateflow

见文件: