10 votes

composer la boucle foreach : les invocations @Composable ne peuvent se faire qu'à partir du contexte d'une fonction @Composable

J'essaie d'itérer sur un fichier List d'objets, pour chacun de ces objets je veux afficher une carte composable. Le problème est que l'on ne peut pas appeler les fonctions composables à partir de l'intérieur de l'objet. list.forEach{} des crochets.

Le code :

@Composable
fun Greeting(listy : List<SomethingForLater>) {
  LazyColumn {
    listy.forEach {
        //error here
        testCard(somethingForLater = it)
        }

    }
}
@Composable
fun testCard(somethingForLater: SomethingForLater){
val theme = MaterialTheme
Card(shape = theme.shapes.small,backgroundColor = theme.colors.secondary){
    Column {
        Row {
            Text(
                text = somethingForLater.task,
                modifier = Modifier.padding(start = 5.dp,
                    top = 3.dp,bottom = 3.dp
                ),
                fontSize = 18.sp,
                fontWeight = FontWeight.Bold,

                )
        }
    }
    }
}

15voto

Marat Points 443

Il y a items dans LazyColumn

LazyColumn {
        items(listy) { message ->
            testCard(message)
        }
    }

Ou vous pouvez simplement changer LazyColumn à Column

15voto

sangeetds Points 138

LazyColumn ne fournit pas de contenu composable. Vous devez donc envelopper vos fonctions composables à l'intérieur de items paramètre.

@Composable
fun Greetings(listy : List<SomethingForLater>) {
  LazyColumn {
    item(listy.size) {
      listy.forEach { somethingForLater ->
        TestCard(somethingForLater = somethingForLater)
      }
    }
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X