@Composable
fun ShowDialog(
title: String,
text: String,
onDismiss: () -> Unit = {}
) {
AlertDialog(
onDismissRequest = onDismiss,
title = { Text(text = title) },
text = { Text(text = text) },
confirmButton = {
Button(
onClick = onDismiss
) {
Text(text = "OK")
}
},
dismissButton = {
Button(
onClick = onDismiss
) {
Text(text = "Cancel")
}
}
)
}
当我单击按钮或对话框外部时,没有任何反应。为什么以及如何解决这个问题?我有一个解决方案,我使用 isShowingDialog 手动隐藏,但在我看来,这是一个拐杖,这个组件应该在内部而不是手动处理这个问题。
这就是 Compose 的工作原理。
AlertDialog
是一个简单的可组合函数。如果它存在于撰写树中,则显示它,否则不显示。因此,您需要一个状态变量来指示是否应显示或跳过对话框:
var isShowingDialog by rememberSaveable { mutableStateOf(false) }
if (isShowingDialog)
ShowDialog(
...
onDismiss = { isShowingDialog = false },
)
如果要显示对话框,请设置
isShowingDialog = true
(例如,在按钮的回调中)。如果将其设置为 false,则隐藏。
另请参阅文档及其示例。