У меня есть диалоговое окно, которое я не могу закрыть, когда нажимаю кнопку, это мой код, я считаю, что это для цикла if, но мне нужно, чтобы он был правдой в этих обстоятельствах, любая идея, которая могла бы помочь мне здесь?
@Composable
fun PopupWindowDialog(
parentUiState: ParentHomeUiState,
) {
val openDialog = remember { mutableStateOf(false) }
var sliderPosition by remember { mutableStateOf(0f) }
if (!parentUiState.showInAppFeedback){
openDialog.value = true
}
val recommend = sliderPosition.toInt()
Column(
) {
Box {
if (openDialog.value) {
Dialog(
onDismissRequest = { openDialog.value = false },
properties = DialogProperties(),
){
Box(
Modifier
.fillMaxWidth()
.fillMaxHeight()
//.padding(vertical = 70.dp, horizontal = 10.dp)
.padding(vertical = 70.dp )
.background(Color.White, RoundedCornerShape(10.dp))
//.border(1.dp, color = Color.Black, RoundedCornerShape(20.dp))
.border(1.dp, color = Color.White, RoundedCornerShape(20.dp))
) {
Button(
modifier = Modifier
.fillMaxWidth()
.padding(10.dp),
onClick = {
openDialog.value = !openDialog.value
}
) {
Text(
text = "¡Contesta y gana +20 puntos!",
style = MaterialTheme.typography.subtitle2,
fontWeight = FontWeight.Bold,
modifier = Modifier.padding(3.dp))
}
}
}
}
}
}
}
У меня есть диалог, который я не могу закрыть, когда нажимаю кнопку
Поскольку вы не показали, как вызывается ваш опубликованный код (составной), я могу предположить, что .showInAppFeedback оценивает true.
Обратите внимание на эти части ваших кодов
val openDialog = remember { mutableStateOf(false) }
...
...
if (!parentUiState.showInAppFeedback) {
openDialog.value = true
}
, openDialog - это состояние, и когда оно меняет значение, оно re-compose будет LaunchedEffect вашим компонуемым, поэтому, когда диалоговое окно видно и когда вы устанавливаете его в false с помощью нажатия кнопки, весь компонуемый будет перекомпоновываться и переоценивать ваше условие if, снова установите для openDialog.value значение true, и диалоговое окно никогда не закроется.
Я не знаю вашего варианта использования, но вы можете обернуть его внутри .showInAppFeedback
LaunchedEffect(parentUiState.showInAppFeedback) {
openDialog.value = true
}
Поскольку parentUiState.showInAppFeedback не обновляется, openDialog.value всегда будет установлено на true при перекомпоновке представления. Вы должны использовать parentUiState.showInAppFeedback в начальном блоке remember, но не для будущей перекомпоновки.
@Composable
fun PopupWindowDialog(parentUiState: ParentHomeUiState) {
val openDialog = remember { mutableStateOf(!parentUiState.showInAppFeedback) }
var sliderPosition by remember { mutableStateOf(0f) }
val recommend = sliderPosition.toInt()
Column {
Box {
if (openDialog.value) {
Dialog(
onDismissRequest = { openDialog.value = false },
properties = DialogProperties(),
) {
Box(
Modifier
.fillMaxWidth()
.fillMaxHeight()
//.padding(vertical = 70.dp, horizontal = 10.dp)
.padding(vertical = 70.dp)
.background(Color.White, RoundedCornerShape(10.dp))
//.border(1.dp, color = Color.Black, RoundedCornerShape(20.dp))
.border(1.dp, color = Color.White, RoundedCornerShape(20.dp))
) {
Button(
modifier = Modifier
.fillMaxWidth()
.padding(10.dp),
onClick = {
openDialog.value = !openDialog.value
}
) {
Text(
text = "¡Contesta y gana +20 puntos!",
style = MaterialTheme.typography.subtitle2,
fontWeight = FontWeight.Bold,
modifier = Modifier.padding(3.dp)
)
}
}
}
}
}
}
}
Да в том то и дело, я не знаю как предотвратить повторный вход в цикл