@Composable 调用只能在 TrailingIcon 的 @Composable 函数的上下文中发生

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

目前我正在学习jetpack compose,并且遇到了多个错误,就像我上面所说的那样。 从这里的帖子中我了解到,您不能在例如“函数”中使用@Composables,例如onClick

这至少回答了我关于此错误的部分问题,但仍有一个问题仍然存在。 现在我正在为 DropDownMenu 编写代码并使用 TrailingIcon 并且我得到了相同的消息。我猜这可能是因为值 (TrailingIcon) 不是 TextField 的兼容值。

有人知道我应该做什么吗?如果它的值类型错误,我应该使用哪一种?

提前致谢!

android-jetpack-compose composable
1个回答
0
投票

ExposedDropdownMenu
的官方文档中,提供了代码示例。我复制在下面,请特别检查您是否使用了正确的
material3
导入:

import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExposedDropdownMenuBox
import androidx.compose.material3.ExposedDropdownMenuDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.MenuAnchorType
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier

val options = listOf("Cupcake", "Donut", "Eclair", "Froyo", "Gingerbread")
var expanded by remember { mutableStateOf(false) }
var text by remember { mutableStateOf(options[0]) }

ExposedDropdownMenuBox(
    expanded = expanded,
    onExpandedChange = { expanded = it },
) {
    TextField(
        modifier = Modifier.menuAnchor(MenuAnchorType.PrimaryNotEditable),
        value = text,
        onValueChange = {},
        readOnly = true,
        singleLine = true,
        label = { Text("Label") },
        trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) },
        colors = ExposedDropdownMenuDefaults.textFieldColors(),
    )
    ExposedDropdownMenu(
        expanded = expanded,
        onDismissRequest = { expanded = false },
    ) {
        options.forEach { option ->
            DropdownMenuItem(
                text = { Text(option, style = MaterialTheme.typography.bodyLarge) },
                onClick = {
                    text = option
                    expanded = false
                },
                contentPadding = ExposedDropdownMenuDefaults.ItemContentPadding,
            )
        }
    }
}

特别检查你是否有

import androidx.compose.material3.TextField
import androidx.compose.material3.ExposedDropdownMenuDefaults
© www.soinside.com 2019 - 2024. All rights reserved.