Получение странной ошибки при попытке LazyColumn () в Jetpack compose

Я пытаюсь запустить простой объект LazyColumn, но не могу запустить его без этой странной ошибки. Вот мой код:

      @Composable 
fun Test(){
    LazyColumn() {
        Text(text = "Placeholder", fontSize= 30.sp)
        Spacer(modifier = Modifier.padding(10.dp))
    }
}

Вот ошибки:

      org.jetbrains.kotlin.diagnostics.SimpleDiagnostic@74c0fa2 (error: could not render message)

org.jetbrains.kotlin.diagnostics.SimpleDiagnostic@c077eec3 (error: could not render message)

Что-то не так с моим кодом или это ошибка? * Я хотел протестировать функцию прокрутки, копируя и вставляя строки после оператора LazyColumn() снова и снова

3 ответа

С участием 1.0.0-beta04 ты можешь использовать:

      val itemsList = (0..50).toList()
LazyColumn() {
    items(itemsList) {
        Text(text = "Placeholder", fontSize = 30.sp)
        Spacer(modifier = Modifier.padding(10.dp))
    }
}

в LazyListScope чтобы отобразить элементы, вы должны использовать одну из предоставленных функций:item, items, itemsindexed а также stickyHeader.

Студия ошибок должна показывать @Composable invocations can only happen from the context of a @Composable function; это ошибка, которую вы получите при компиляции этой функции. Эта студия показывает (error: could not render message) это известная ошибка, над которой работает команда.

Причина, по которой плагин компилятора compose генерирует эту ошибку, - это лямбда, ожидаемая LazyColumn не является составной лямбда, но является LazyListDSL, в котором описывается столбец. Например, что-то вроде

      @Composable 
fun Test(){
    LazyColumn() {
        items(10_000) {
            Text(text = "Placeholder $it", fontSize = 30.sp)
            Spacer(modifier = Modifier.padding(10.dp))
        }
    }
}

это, наверное, то, что вы хотели. Он не создает 10 000 элементов, он создает только количество, достаточное для размещения на экране, и при необходимости создает дополнительные строки (отбрасывая строки по мере их закрытия) до строки 9999.

Попробуй это:

      @Composable 
fun Test(){
    LazyColumn() {
        for (i in 1..10) {
            TestItem(i)
        }
    }
}

@Composable
fun TestItem(i: Int) {
    Text(text = "Placeholder $i", fontSize = 30.sp)
    Spacer(modifier = Modifier.padding(10.dp))
}
Другие вопросы по тегам