Mutablestateof - 状态提升

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

如何在两个函数中管理一个状态? (打开对话框) 如何将 openDialog 状态从 ProductDialog() 转移到 AppBar()? 我知道我可以为每个州开设单独的课程,但我不想这样做。

@Composable
fun ProductDialog() {
    val openDialog = rememberSaveable() { mutableStateOf(true) }
    val productNameState = remember { mutableStateOf("") }

    AlertDialog(
        onDismissRequest = { openDialog.value = false },
        title = { Text(
            modifier = Modifier.padding(bottom = 8.dp),
            text = "Add new product",
            fontSize = 20.sp,
            fontWeight = FontWeight.Bold
        ) },
        confirmButton = { Button(onClick = { openDialog.value = false }) {
            Text(text = "Add") }
        },
        dismissButton = { Button(onClick = { openDialog.value = false }) {
            Text(text = "Cancel")
            }
        },
        text = {
            Column() {
                TextField(value = productNameState.value, onValueChange = {
                })
                TextField(value = productNameState.value, onValueChange = {})
            }
        }
    )
}

@Composable
fun AppBar() {
    val openDialog = rememberSaveable() { mutableStateOf(false) }

    if (openDialog.value) ProductDialog()

    Scaffold(
        topBar = {
                TopAppBar(
                    actions = { Icon(imageVector = Icons.Default.Menu, contentDescription = null) },
                    title = { Text(text = "Shopping List Compose") })
                },
        floatingActionButton = {
            FloatingActionButton(modifier = Modifier.padding(10.dp), onClick = { openDialog.value = true }) {
            Icon(Icons.Default.Add, contentDescription = null)
        }}
    ) {
        ListItems()
    }
}

如何在两个函数中管理一个状态? (打开对话框)

android kotlin state hoisting mutablestateof
1个回答
0
投票

从您分享的示例来看,

openDialog
ProductDialog
的唯一用途似乎是关闭对话框。您可以改为将 lambda 传递给
ProductDialog
来关闭对话框。

@Composable
fun ProductDialog(closeDialog: () -> Unit) {
    AlertDialog(
        onDismissRequest = closeDialog,
        title = { ... },
        confirmButton = { 
            Button(onClick = closeDialog) {
                Text(text = "Add")
            }
        },
        dismissButton = { 
            Button(onClick = closeDialog) {
                Text(text = "Cancel")
            }
        },
        text = { ... }
    )
}

@Composable
fun AppBar() {
    val openDialog by rememberSaveable() { mutableStateOf(false) }

    if (openDialog) ProductDialog { openDialog = false}

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