일반적으로 Flow는 LifeCycle을 인식할 수 없지만, LiveData는 LifeCycle을 인식할 수 있다.
StateFlow도 repeatOnLifecycle과 함께 StateFlow를 사용하여 Lifecycle을 인식할 수 있다.
Flow에서는 LiveData에는 없는 다양한 연산자를 사용할 수 있다.
LiveData의 경우 초기값을 강제로 지정하지 않고 init{}
을 통하여 더 많은 코드를 사용할 수 있지만, StateFlow의 경우 초기 값(null을 포함)을 강제로 지정해야 합니다.
ViewModel에서 사용
private val _dataState = MutableStateFlow<String>("")
val dataState = _dataState.asStateFlow()
fun setDataState(newDataState: String) {
_dataState.value = newDataState
} // End of setDataState
Compose함수에서 사용
@Composable
private fun observeAnything() {
lifecycleScope.launchWhenStarted {
viewModel.stateFlow.collectLatest {
// 구현
}
}
} // End of observeAnything