为什么我不能使用更新功能来更新 Kotlin 中的流程?
Why can't I use the update function to update a flow in Kotlin?
我希望使用代码 A 来更新流程,但我发现流程 soundDensityState
没有更新。
但是代码 B 可以工作,代码 A 有什么问题?
代码A
private val _soundDensityState = MutableStateFlow(MSoundDensity() )
val soundDensityState = _soundDensityState.asStateFlow()
fun beginSoundDensity(filename: String){
myJob = viewModelScope.launch(Dispatchers.IO) {
aSoundMeter.getMSoundDensity().cancellable().collect {
_soundDensityState.update { it }
}
}
}
代码B
private val _soundDensityState = MutableStateFlow(MSoundDensity() )
val soundDensityState = _soundDensityState.asStateFlow()
fun beginSoundDensity(filename: String){
myJob = viewModelScope.launch(Dispatchers.IO) {
aSoundMeter.getMSoundDensity().cancellable().collect {
_soundDensityState.value =it
}
}
}
it
中的 lambda 是 update
的一个参数,它保存着 StateFlow 的当前值。它正在隐藏 collect
lambda 的 it
。
StateFlow
由于名称阴影而未更新,因为 update
和 collect
lambda 的参数具有相同的名称 it
.
可以通过为 lambda
中的任何一个指定不同的名称来解决。将 collect
lambda 的名称更改为 soundDensity
并在 update
.
中使用它
private val _soundDensityState = MutableStateFlow(MSoundDensity() )
val soundDensityState = _soundDensityState.asStateFlow()
fun beginSoundDensity(filename: String){
myJob = viewModelScope.launch(Dispatchers.IO) {
aSoundMeter.getMSoundDensity().cancellable().collect { soundDesity ->
_soundDensityState.update { soundDesity }
}
}
}
我希望使用代码 A 来更新流程,但我发现流程 soundDensityState
没有更新。
但是代码 B 可以工作,代码 A 有什么问题?
代码A
private val _soundDensityState = MutableStateFlow(MSoundDensity() )
val soundDensityState = _soundDensityState.asStateFlow()
fun beginSoundDensity(filename: String){
myJob = viewModelScope.launch(Dispatchers.IO) {
aSoundMeter.getMSoundDensity().cancellable().collect {
_soundDensityState.update { it }
}
}
}
代码B
private val _soundDensityState = MutableStateFlow(MSoundDensity() )
val soundDensityState = _soundDensityState.asStateFlow()
fun beginSoundDensity(filename: String){
myJob = viewModelScope.launch(Dispatchers.IO) {
aSoundMeter.getMSoundDensity().cancellable().collect {
_soundDensityState.value =it
}
}
}
it
中的 lambda 是 update
的一个参数,它保存着 StateFlow 的当前值。它正在隐藏 collect
lambda 的 it
。
StateFlow
由于名称阴影而未更新,因为 update
和 collect
lambda 的参数具有相同的名称 it
.
可以通过为 lambda
中的任何一个指定不同的名称来解决。将 collect
lambda 的名称更改为 soundDensity
并在 update
.
private val _soundDensityState = MutableStateFlow(MSoundDensity() )
val soundDensityState = _soundDensityState.asStateFlow()
fun beginSoundDensity(filename: String){
myJob = viewModelScope.launch(Dispatchers.IO) {
aSoundMeter.getMSoundDensity().cancellable().collect { soundDesity ->
_soundDensityState.update { soundDesity }
}
}
}