Параметры текста и значков на вкладке не допускают составных вызовов

В этом коде в текстовом параметре я получаю ошибку:

Вызовы @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
                )
            }
        ) {

        }
    }
}
3
0
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно удалить пустую лямбду (фигурные скобки { }) после Tab(...).

Причина в том, что существует два составных элемента Tab: один с параметром text и один с лямбда-выражением содержимого. Вы попытались использовать оба параметра, поэтому компилятор не смог решить, какой из двух компонуемых объектов выбрать, и на данный момент не принимает ни одного.

В остальной части кода предполагается, что будет некоторая функция, которая имеет все указанные вами параметры, но она не будет знать, какого они типа, поэтому лямбда text и icon просто предполагаются простыми лямбдами, и на первый взгляд это так. выглядит нормально. Но компонуемые Text и компонуемые Icon, которые вы используете в этих лямбда-выражениях, обнаруживают, что они не вызываются из составной лямбды, отсюда и ваша ошибка.

Ошибка, на которую вы наткнулись, является следствием первой ошибки, которую Tab не удалось найти. Если бы вы начали с этого, к тому времени, как вы просмотрели бы следующие ошибки, они бы уже исчезли.

Другие вопросы по теме