我使用了这里的示例:
@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
来启动可组合项?否则我该如何解决这个问题?
问题在于
show
的缓存范围。 TimedLayout()
的下一次重组将在组合中强制执行新键,从而强制执行新值。
您需要将状态上移一级或在调用方站点中。
一种可能的简单解决方案是在 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" )
}
}
}
}
试试这个代码:
@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" )
}
}
}
}