stateflow vs composestate

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 操作等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值