总结:
- snapshotFlow是一个普通的kotlin函数,没有被@Composable修饰;
- snapshotFlow函数返回值是一个flow(冷流):
fun <T> snapshotFlow(
block: () -> T
): Flow<T> = flow {
//略
}
- snapshotFlow用于将不止一个state转化为flow:
snapshotFlow {
myState1 + myState2
}.map {
it
}.collect {
Log.e(">>>", "$it")
}
- state未改变时,终端符(此处为collect)不会执行,等同于distinctionUntilChange操作符;
- 短时多次改变state时,终端符(此处为collect)只为接收到最后一次数据:
var myState by remember {
mutableStateOf(0)
}
LaunchedEffect(key1 = Unit, block = {
snapshotFlow {
myState
}.map {
it
}.collect {
Log.d(">>>", "$it")//只会打印最后一次发射的数据
}
})
LaunchedEffect(key1 = Unit, block = {
repeat(10) {
myState++
}
})