https://www.youtube.com/watch?v=T8vApYJlW8o
在viewmodel中定义两个颜色,一个用stateflow,一个用compose的 state
//
private val _stateColor = MutableStateFlow(0xffffffff)
val stateColor = _stateColor.asStateFlow()
var composeColor by mutableStateOf(0xffffffff)
private set
来随机生成一个颜色,并给上面的两个变量赋值
fun generateColor() {
val newColor = Random.nextLong(0xffffffff)
_stateColor.value = newColor
composeColor = newColor
}
在UI上体现出来
val composeColor = composeViewModel.composeColor
val stateColor by composeViewModel.stateColor.collectAsState()
Column(modifier = Modifier.padding(innerPadding)
) {
Text(text = "composeColor", color = Color(composeColor))
Text(text = "stateColor", color = Color(stateColor))
Button(onClick = {
composeViewModel.generateColor()
}) {
Text("Change Color")
}
}
使用起来都没什么问题的
1.但是如果想要compose free 的话,还是推荐 stateflow
2.另外如果要存储color值,就是activity销毁后还可以恢复的话,stateflow操作会简单点
val stateColor = savedStateHandle.getStateFlow("color", 0Xffffffff)
var composeColor by mutableStateOf(
savedStateHandle.get("color")?:0Xffffffff
)
private set
fun generateColor() {
val newColor = Random.nextLong(0xffffffff)
// _stateColor.value = newColor
savedStateHandle["color"] = newColor
composeColor = newColor
}
3. stateflow,还有一些statein map 操作等