撰写警报对话框未关闭

use*_*391 5 android kotlin android-jetpack-compose compose-recomposition

我有一个对话框,当我按下按钮时我无法关闭这是我的代码,我相信这是用于 if 循环的,但我需要它在这种情况下使其成为现实,有什么想法可以帮助我吗?

\n
@Composable\n    fun PopupWindowDialog(\n    parentUiState: ParentHomeUiState,\n) {\n    val openDialog = remember { mutableStateOf(false) }\n    var sliderPosition by remember { mutableStateOf(0f) }\n\n    if (!parentUiState.showInAppFeedback){\n        openDialog.value = true\n    }\n    val recommend = sliderPosition.toInt()\n    Column(\n    ) {\n        Box {\n            if (openDialog.value) {\n                Dialog(\n                    onDismissRequest = { openDialog.value = false },\n                    properties = DialogProperties(),\n                ){\n                    Box(\n                        Modifier\n                            .fillMaxWidth()\n                            .fillMaxHeight()\n                            //.padding(vertical = 70.dp, horizontal = 10.dp)\n                            .padding(vertical = 70.dp )\n                            .background(Color.White, RoundedCornerShape(10.dp))\n                            //.border(1.dp, color = Color.Black, RoundedCornerShape(20.dp))\n                            .border(1.dp, color = Color.White, RoundedCornerShape(20.dp))\n                    ) {\n                        Button(\n                            modifier = Modifier\n                                .fillMaxWidth()\n                                .padding(10.dp),\n                            onClick = {\n                              openDialog.value = !openDialog.value\n                            }\n                        ) {\n                            Text(\n                                text = "\xc2\xa1Contesta y gana +20 puntos!",\n                                style = MaterialTheme.typography.subtitle2,\n                                fontWeight = FontWeight.Bold,\n                                modifier = Modifier.padding(3.dp))\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

z.g*_*g.y 2

我有一个对话框,按下按钮后无法关闭

由于您没有显示您发布的代码(可组合)是如何被调用的,所以我假设.showInAppFeedback评估结果为真。

注意代码的这些部分

val openDialog = remember { mutableStateOf(false) }

...
...

if (!parentUiState.showInAppFeedback) {
    openDialog.value = true
}
Run Code Online (Sandbox Code Playgroud)

,openDialog是一种状态,当它更改值时,它会改变re-compose您的整个可组合项,因此当对话框可见时,并且当您通过单击按钮将其设置为 false 时,整个可组合项将重新组合并重新评估您的 if 条件,设置 openDialog .value 再次变为 true,对话框将永远不会关闭。

我不知道你的用例,但你可以将它包装在LaunchedEffect

LaunchedEffect(parentUiState.showInAppFeedback) {
    openDialog.value = true
}
Run Code Online (Sandbox Code Playgroud)