对于堆栈溢出上的错误,似乎有无数的解释,但没有一个能解决我的问题。
我正在构建一个构图警告对话框。我正在尝试显示一个选项列表,这些选项可以根据数据进行更改。
对话框
@Composable
fun OptionSelectComposeDialog(
vm: OptionSelectDialogViewModel
){
...
val optionList = vm.optionList
Column {
if (openDialog.value) {
AlertDialog(
...
text = {
OptionListDialogContent(optionList)
},
...
)
}
}
在OptionListDialogContent
可组合函数中,我试图打印列表,但Text
可组合给出了一个错误。
OptionListDialogContent
@Composable
fun OptionListDialogContent(optionList: OptionList?) {
val optionItemArray = optionList?.getOptionItemArray(null)
LazyColumn() {
if (optionItemArray != null) {
optionItemArray.forEach { optionItem ->
Text(text = optionItem.toString()) // Error "@Composable invocations can only happen from the context of a @Composable function"
}
}
}
}
我怀疑toString
调用在optionItem
上抛出了这个错误,所以我尝试映射数组来将数组值转换为字符串,但仍然收到了这个错误。
将数组转换为字符串后的OptionListDialogContent
:
@Composable
fun OptionListDialogContent(optionList: OptionList?) {
val optionItemArray = optionList?.getOptionItemArray(null)
val optionItemStringArray = optionItemArray?.map { it.toString()}?.toTypedArray()
LazyColumn() {
if (optionItemStringArray != null) {
optionItemStringArray.forEach { optionItem ->
Timber.d("This is working? - optionItemArray.size: %s", optionItemArray.size)
Text(text = optionItem) // Error "@Composable invocations can only happen from the context of a @Composable function"
}
}
}
}
有人看到问题在哪里了吗?(我已经验证了optionItemArray
不是空的)
发布于 2022-03-04 19:29:08
事实证明,这是我如何使用LazyColumn的一个问题。LazyColumn需要接收数组大小。做这件事有很多不同的方法,但我就是这样做的:
LazyColumn() {
if (optionItemStringArray != null) {
items(optionItemStringArray.size) { i ->
Row() {
Text(text = optionItemStringArray[i])
}
}
}
}
发布于 2022-03-04 16:51:58
您正在尝试在文本字段中放置一个惰性列表(在OptionListDialogContent中)。
text = {
OptionListDialogContent(optionList)
},
参数需要兼容才能得到一个可组合的函数。在这种情况下,文本没有这样做。
https://stackoverflow.com/questions/71354410
复制相似问题