为什么我不能使用更新功能来更新 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 由于名称阴影而未更新,因为 updatecollect 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 }
        }
    }
}