\'@Composable 调用只能在 @Composable 函数的上下文中进行\'我是 jetpack compose 的新手,经常收到此错误 \'@Composable 调用只能在 @Composable 函数的上下文中进行...
我是 jetpack compose 的新手,在文本字段中添加图标和标签时不断收到此错误“@Composable 调用只能在 @Composable 函数的上下文中发生”。
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun EditNumberField(
value: String,
@StringRes label: Int,
@DrawableRes icon: Int,
keyboardOptions: KeyboardOptions,
onValueChange: (String) -> Unit,
modifier: Modifier = Modifier
){
TextField(
value = value,
label = { Text(stringResource(label)) },
icon = { Icon(painter = painterResource(id = icon), contentDescription = null) },
keyboardOptions = keyboardOptions,
onValueChange = onValueChange,
singleLine = true,
modifier = modifier,
colors = TextFieldDefaults.textFieldColors(
containerColor = Color(0xFFBDFCC9))
)
}
\'TextField(), label = {Text()}, icon = {Icon()}\' 这些行用红色下划线标出,显示了上面提到的错误。
Composable 没有名为 icon 的 TextField
。您可以根据需要使用 leadingIcon 或 trailingIcon ,然后解决显示的错误。
以下是 TextField
材料 3 的文档中的可组合内容 :
fun TextField(
value: TextFieldValue,
onValueChange: (TextFieldValue) -> Unit,
label: @Composable (() -> Unit)? = null,
leadingIcon: @Composable (() -> Unit)? = null,
trailingIcon: @Composable (() -> Unit)? = null,
//... other paramteres
) { } //... content of the composable
由于另一个人已经给出了答案,因此我将您的代码修改为此。
使用此可组合函数。
@Composable
fun EditNumericField(
value: String,
label: Int,
icon: Painter,
keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
onValueChange: (String) -> Unit,
modifier: Modifier = Modifier
) {
TextField(
value = value,
onValueChange = onValueChange,
label = { Text(text = stringResource(id = label)) },
leadingIcon = { Icon(painter = icon, contentDescription = "Icons") },
singleLine = true,
modifier = modifier,
colors = TextFieldDefaults.colors(
focusedContainerColor = Color(0xFFBDFCC9),
unfocusedContainerColor = Color(0xFFBDFCC9)
),
keyboardOptions = keyboardOptions
)
}
这是函数调用。
EditNumericField(
value = "Any value",
label = R.string.app_name,
icon = painterResource(id = R.drawable.ic_launcher_foreground),
keyboardOptions = KeyboardOptions.Default.copy(imeAction = ImeAction.Done),
onValueChange = { },
modifier = Modifier
)
我希望这可以帮助你。