首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jetpack组合BottomSheet

Jetpack组合BottomSheet
EN

Stack Overflow用户
提问于 2022-03-17 12:27:29
回答 1查看 1.4K关注 0票数 0

我已经开始学习喷气背包作曲了。我想在单击IconButton.But时显示@Composable调用只有在@Composable函数的上下文中才会出现错误,@Composable调用是如何实现这个逻辑的。

这是ui屏幕

这是代码

代码语言:javascript
复制
@RequiresApi(Build.VERSION_CODES.O)
@OptIn(ExperimentalMaterialApi::class)
@Composable
fun AddTaskScreen(navController: NavController) {
    var taskTitle by remember { mutableStateOf("") }
    val currentDate = SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(Date())
    var taskDescription by remember { mutableStateOf("") }
    val taskDuration by remember { mutableStateOf(currentDate.toString()) }
    val taskTypes = listOf("Urgent", "Medium", "High")
    var expanded by remember { mutableStateOf(false) }
    var selectedOptionText by remember { mutableStateOf(taskTypes[0]) }
    val clickHandler: () -> Unit = {
       DateBottomSheet()
    }
    Column() {
        AppToolBar(title = "AddTaskScreen") {
            navController.navigateUp()
        }

        OutlinedTextField(
            value = taskTitle,
            label = { Text(text = "Please input task title") },
            onValueChange = { text -> taskTitle = text },
            modifier = textFieldModifier
        )
        OutlinedTextField(
            value = taskDescription,
            label = { Text(text = "Please input task description") },
            onValueChange = { text -> taskDescription = text },
            modifier = textFieldModifier.height(200.dp)
        )

        ExposedDropdownMenuBox(
            expanded = expanded,
            onExpandedChange = {
                expanded = !expanded
            },
            modifier = Modifier
                .fillMaxWidth()
                .padding(20.dp)
        ) {
            OutlinedTextField(
                readOnly = true,
                value = selectedOptionText,
                onValueChange = { },
                label = { Text("Task priority") },
                trailingIcon = {
                    ExposedDropdownMenuDefaults.TrailingIcon(
                        expanded = expanded
                    )
                },
                modifier = Modifier.fillMaxWidth()
            )
            ExposedDropdownMenu(
                expanded = expanded,
                onDismissRequest = {
                    expanded = false
                }
            ) {
                taskTypes.forEach { selectionOption ->
                    DropdownMenuItem(
                        onClick = {
                            selectedOptionText = selectionOption
                            expanded = false
                        }
                    ) {
                        Text(text = selectionOption)
                    }
                }
            }

        }


        //task time textField
        OutlinedTextField(
            value = taskDuration,
            readOnly = true,
            label = { Text(text = "Please select task duration") },
            onValueChange = { text -> taskDescription = text },
            modifier = textFieldModifier,
            trailingIcon = {
                IconButton(
                    onClick = {
                    clickHandler.invoke()
                }) {
                    Icon(Icons.Filled.DateRange, contentDescription = "")
                }
            }
        )
    }
}

@OptIn(ExperimentalMaterialApi::class)
@Composable
fun DateBottomSheet() {
    val bottomSheetScaffoldState = rememberBottomSheetScaffoldState(
        bottomSheetState = rememberBottomSheetState(
            initialValue = BottomSheetValue.Collapsed
        )
    )


    BottomSheetScaffold(
        sheetContent = {
            Column() {
                Text(text = "ThisIsBottomSheet")
                Text(text = "ThisIsBottomSheet")
                Text(text = "ThisIsBottomSheet")
                Text(text = "ThisIsBottomSheet")
                Text(text = "ThisIsBottomSheet")
            }
        },
        scaffoldState = bottomSheetScaffoldState
    ) {
       
    }

但我得到了错误@Composable调用只能在@Composable函数的上下文中发生--我如何实现这个逻辑

EN

回答 1

Stack Overflow用户

发布于 2022-03-17 18:01:52

您可以简单地使用mutabelState来处理按钮单击事件以显示底部工作表。

您可以执行以下更改->

代码语言:javascript
复制
@RequiresApi(Build.VERSION_CODES.O)
@OptIn(ExperimentalMaterialApi::class)
@Composable
fun AddTaskScreen(navController: NavController) {
    var taskTitle by remember { mutableStateOf("") }
    val currentDate = SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(Date())
    var taskDescription by remember { mutableStateOf("") }
    val taskDuration by remember { mutableStateOf(currentDate.toString()) }
    val taskTypes = listOf("Urgent", "Medium", "High")
    var expanded by remember { mutableStateOf(false) }
    var selectedOptionText by remember { mutableStateOf(taskTypes[0]) }
    
    var openBottomSheet by rememberSaveable { mutableStateOf(false) }

    Column() {
        AppToolBar(title = "AddTaskScreen") {
            navController.navigateUp()
        }

        OutlinedTextField(
            value = taskTitle,
            label = { Text(text = "Please input task title") },
            onValueChange = { text -> taskTitle = text },
            modifier = textFieldModifier
        )
        OutlinedTextField(
            value = taskDescription,
            label = { Text(text = "Please input task description") },
            onValueChange = { text -> taskDescription = text },
            modifier = textFieldModifier.height(200.dp)
        )

        ExposedDropdownMenuBox(
            expanded = expanded,
            onExpandedChange = {
                expanded = !expanded
            },
            modifier = Modifier
                .fillMaxWidth()
                .padding(20.dp)
        ) {
            OutlinedTextField(
                readOnly = true,
                value = selectedOptionText,
                onValueChange = { },
                label = { Text("Task priority") },
                trailingIcon = {
                    ExposedDropdownMenuDefaults.TrailingIcon(
                        expanded = expanded
                    )
                },
                modifier = Modifier.fillMaxWidth()
            )
            ExposedDropdownMenu(
                expanded = expanded,
                onDismissRequest = {
                    expanded = false
                }
            ) {
                taskTypes.forEach { selectionOption ->
                    DropdownMenuItem(
                        onClick = {
                            selectedOptionText = selectionOption
                            expanded = false
                        }
                    ) {
                        Text(text = selectionOption)
                    }
                }
            }

        }


        //task time textField
        OutlinedTextField(
            value = taskDuration,
            readOnly = true,
            label = { Text(text = "Please select task duration") },
            onValueChange = { text -> taskDescription = text },
            modifier = textFieldModifier,
            trailingIcon = {
                IconButton(
                    onClick = {
                    openBottomSheet = true
                }) {
                    Icon(Icons.Filled.DateRange, contentDescription = "")
                }
            }
        )
        if (openBottomSheet) {
            DateBottomSheet()
            
        }
    }
}

@OptIn(ExperimentalMaterialApi::class)
@Composable
fun DateBottomSheet() {
    val bottomSheetScaffoldState = rememberBottomSheetScaffoldState(
        bottomSheetState = rememberBottomSheetState(
            initialValue = BottomSheetValue.Collapsed
        )
    )


    BottomSheetScaffold(
        sheetContent = {
            Column() {
                Text(text = "ThisIsBottomSheet")
                Text(text = "ThisIsBottomSheet")
                Text(text = "ThisIsBottomSheet")
                Text(text = "ThisIsBottomSheet")
                Text(text = "ThisIsBottomSheet")
            }
        },
        scaffoldState = bottomSheetScaffoldState
    ) {
       
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71512276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档