Ответ
Для связи ViewModel и Fragment с Flow:
- В ViewModel создаем Flow:
private val _dataFlow = MutableStateFlow<String>("")
val dataFlow: StateFlow<String> = _dataFlow
fun updateData(newData: String) {
_dataFlow.value = newData
}
- В Fragment собираем Flow в lifecycleScope:
viewModel.dataFlow
.onEach { data ->
// Обновляем UI
binding.textView.text = data
}
.launchIn(viewLifecycleOwner.lifecycleScope)
Ключевые моменты:
- Используем StateFlow для хранения состояния
- ViewModel предоставляет только read-only Flow
- Подписываемся в lifecycleScope с учетом жизненного цикла
- ViewLifecycleOwner гарантирует отмену подписки при уничтожении View