#android #kotlin-coroutines
#Android #kotlin-сопрограммы
Вопрос:
Я перехожу с 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)
}
}
}
}
когда этот поток запускается, мой FirstFragment переходит к другому фрагменту «B». Но когда я нажимаю кнопку «Назад», state
срабатывает еще раз, и вместо перехода к FirstFragment я возвращаюсь к «B». Я полагаю, что такое поведение связано с тем, что поток холодный. Как сделать так, чтобы он вызывался только один раз?
Комментарии:
1. Смотрите документацию: developer.android.com/kotlin/flow/stateflow-and-sharedflow
Ответ №1:
Вероятно, потому, что состояния остаются неизменными, и когда вы возвращаетесь, он повторно наблюдает за состоянием и перемещается. Проверьте эту статью и используйте EventWrapper, который упоминается в статье. Он использовал livedata, но та же логика применима и к stateflow. Статья