У меня есть Composable, который показывает для каждой категории строку с раскрывающимся списком и т. д., и когда я пытаюсь создать категорию Foreach, создайте строку в приложении, чтобы люди могли щелкнуть и выбрать уровень, который показывает ошибку Composable. Вызовы @Composable могут происходить только из контекст функции @Composable
уровни Содержит список категорий
LazyColumn(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
levels?.forEach { category ->
CategoryItem(category) //Error happens here
}
}
*emphasized text*
Вот что делает CategoryItem:
@Composable
fun CategoryItem(category: Category) {
var expanded by remember { mutableStateOf(false) }
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp)
) {
ClickableSquare(
onClick = { expanded =!expanded },
text = category.name
)
if (expanded) {
DropdownMenu(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp),
expanded = expanded,
onDismissRequest = { expanded = false }
) {
category.levels.forEach { level ->
DropdownMenuItem(
text = { Text(text = level.name) },
onClick = {
// Navigate to GameScreen with level data
navController.navigate(route = AppScreens.GameScreen.route + "/${level.code}")
}
)
}
}
}
}
}
С помощью LazyColumn вы не можете использовать обычный цикл для создания элементов пользовательского интерфейса. Вместо этого вам нужно использовать LazyListScope DSL, например функции item() и items(). Вот пример:
LazyColumn(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
items(levels) {
CategoryItem(it)
}
}
Кроме того, важно использовать ключевой параметр в функции items(), особенно если порядок элементов вашего списка можно изменить.
LazyColumn(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
items(
items = levels,
key = { it.id }
) { level ->
CategoryItem(level)
}
}
Во время ввода обязательно выберите функцию items(List<T> items, ...) в контекстной помощи. Также проверьте, что вы импортировали import androidx.compose.foundation.lazy.items.
здесь написано, что «Невозможно найти параметр с таким именем: элементы в «предметах = уровнях». Им что-то не хватает?