如何在可组合项中重置记住的可变状态?

问题描述 投票:0回答:3

我使用了这里的示例

@Composable
private fun TimedLayout() {
    var show by remember { mutableStateOf(true) }

    LaunchedEffect(key1 = Unit){
        delay(5000)
        show = false
    }
    Column(modifier=Modifier.fillMaxSize()) {
        Text("Box showing: $show")
        if(show){
            Box{
                Text(text = "BlaBla"    )
            }
        }
    }
}

这对我来说第一次很好用。当我在

TimedLayout()
消失后立即再次调用
Text()
时,记住的
show
标志仍然是
false
并且没有显示任何文本。

如何使用新的

show
作为
true
来启动可组合项?否则我该如何解决这个问题?

android-jetpack-compose android-jetpack android-compose-textfield
3个回答
3
投票

问题在于

show
的缓存范围。
TimedLayout()
的下一次重组将在组合中强制执行新键,从而强制执行新值。

您需要将状态上移一级或在调用方站点中。


2
投票

一种可能的简单解决方案是在 LaunchedEffect 中将显示值设置为 true

@Composable
private fun TimedLayout() {
    var show by remember { mutableStateOf(true) }

    LaunchedEffect(key1 = Unit){
        show = true
        delay(5000)
        show = false
    }
    Column(modifier=Modifier.fillMaxSize()) {
        Text("Box showing: $show")
        if(show){
            Box{
                Text(text = "BlaBla"    )
            }
        }
    }
}

0
投票

试试这个代码:

@Composable
 fun TimedLayout() {
 var show by remember { mutableStateOf(true) }

LaunchedEffect(key1 = show){
    delay(5000)
    show = !show
}
Column(modifier=Modifier.fillMaxSize()) {
    Text("Box showing: $show")
    if(show){
        Box{
            Text(text = "BlaBla"    )
        }
    }
}

}

© www.soinside.com 2019 - 2024. All rights reserved.