在此代码中,在文本参数中,我收到错误: @Composable 调用只能从 @Composable 函数的上下文中发生,图标也发生同样的情况:@Composable 调用只能从 @ 的上下文中发生可组合函数
如果我删除文本参数和图标参数,代码可以正常工作,但我想在每个选项卡中显示文本和图标。我已经导入了 androidx.compose.material3.Tab 和依赖实现(platform(“androidx.compose:compose-bom:2024.04.01”)),我不知道还能尝试什么
PrimaryTabRow(
selectedTabIndex = selectedTabIndex
) {
tabItems.forEachIndexed { index, item ->
Tab(
selected = (selectedTabIndex == index),
onClick = {
selectedTabIndex = index
},
text = { Text(text = item.titulo)},
icon = {
Icon(
imageVector = if (index == selectedTabIndex) item.selecIcon else item.unselecIcon,
contentDescription = item.titulo
)
}
) {
}
}
}
您需要删除
{ }
之后的空 lambda(大括号 Tab(...)
)。
原因是有两种 Tab 可组合项,一种带有参数
text
,另一种带有内容 lambda。您尝试使用这两个参数,因此编译器无法决定选择两个可组合项中的哪一个,并且暂时不需要。
对于代码的其余部分,它假设有一些函数具有您指定的所有参数,但它不知道它们是什么类型,因此
text
和 icon
lambda 被假设为简单的 lambda乍一看看起来还不错。但是您在这些 lambda 中使用的 Text
可组合项和 Icon
可组合项检测到它们不是从可组合 lambda 调用的,因此您的错误。
您偶然发现的错误是继第一个无法找到
Tab
的错误之后发生的。如果您在看到以下错误时就开始了,那么它们可能已经消失了。