在下面的代码中,显示了两个不同的公共状态处理程序uiState1
和uiState
,这两个场景之间的区别是什么?
// UI state exposed to the UI
// Scenario 1
private val _uiState1: MutableStateFlow<InboxUiState> = MutableStateFlow(InboxUiState.default)
val uiState1 = _uiState1.asStateFlow()
// Scenario 2
private val _uiState: MutableStateFlow<InboxUiState> = MutableStateFlow(InboxUiState.default)
val uiState = _uiState
.stateIn(
viewModelScope,
SharingStarted.Eagerly,
InboxUiState.default
)
其中asStateFlow()将可修改的状态流表示为只读的状态流,stateIn()him转换为冷的流转换成hotStateFlow在给定的协程范围内启动。
stateIn操作符在以下情况下非常有用:存在冷流,该流提供对某些状态值的更新,并且创建和/或维护的成本很高,但是有多个订阅者需要收集最新的状态值。
stateIn: https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/state-in.html
asStateFlow: https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/as-state-flow.html