В этом коде в текстовом параметре я получаю ошибку:
Вызовы @Composable могут происходить только в контексте функции @Composable.
То же самое происходит со мной с значком:
Вызовы @Composable могут происходить только в контексте функции @Composable.
Если я удалю текстовый параметр и параметр значка, код будет работать правильно, но я хочу отображать текст и значок на каждой вкладке. Я импортировал androidx.compose.material3.Tab и зависимость implementation(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
)
}
) {
}
}
}
Вам нужно удалить пустую лямбду (фигурные скобки { }) после Tab(...).
Причина в том, что существует два составных элемента Tab: один с параметром text и один с лямбда-выражением содержимого. Вы попытались использовать оба параметра, поэтому компилятор не смог решить, какой из двух компонуемых объектов выбрать, и на данный момент не принимает ни одного.
В остальной части кода предполагается, что будет некоторая функция, которая имеет все указанные вами параметры, но она не будет знать, какого они типа, поэтому лямбда text и icon просто предполагаются простыми лямбдами, и на первый взгляд это так. выглядит нормально. Но компонуемые Text и компонуемые Icon, которые вы используете в этих лямбда-выражениях, обнаруживают, что они не вызываются из составной лямбды, отсюда и ваша ошибка.
Ошибка, на которую вы наткнулись, является следствием первой ошибки, которую Tab не удалось найти. Если бы вы начали с этого, к тому времени, как вы просмотрели бы следующие ошибки, они бы уже исчезли.