Estoy tratando de aprender a componer jetpack, y tengo elementos de lista con nombre e imagen, mi proyecto funciona y no hay problema para el nombre de lista, pero las imágenes de usuario no se muestran en el emulador. No sé lo que me perdí. ¿Hay alguna solución?
Modelo:
data class Data( var name: String, var image: String)Pantalla:
@Composable fun DataScreen() { val listOfData = listOf( Data("name1", "image1"), Data("name2", "image2"), Data("name3", "image3"),) Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier .fillMaxSize() .background(Color.White) ) { LazyColumn( modifier = Modifier ) { items(listOfData.size) { index -> DataListItem(listOfData[index]) }}}}Articulo:
@Composable fun DataListItem(data: Data) { val context = LocalContext.current val painter = rememberImagePainter( data = data.image ) Column( modifier = Modifier.padding(5.dp) ) { Row( modifier = Modifier .fillMaxWidth() .padding(5.dp) ) { Image( painter = painter, contentDescription = null, contentScale = ContentScale.Crop, modifier = Modifier .size(32.dp) .clip(CircleShape)) Text( text = data.name, fontSize = 12.sp, )}}}Todo lo que veo es una cadena para tu imagen. Un pintor no puede mostrar una imagen de solo una cadena. Tampoco necesita usar la administración de estado para el pintor, ya que ha incluido el pintor en un objeto de datos que conserva el estado:
Este código ha sido probado:
data class Data( var name: String, var painter: Painter ) @Composable fun DataScreen() { val listOfData = listOf( Data("name1", painterResource(R.drawable.cat_1)), Data("name2", painterResource(R.drawable.cat_2)) ) Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier .fillMaxSize() .background(Color.White) ) { LazyColumn( modifier = Modifier.fillMaxSize() ) { items(listOfData.size) { index -> DataListItem(listOfData[index]) } } } } @Composable fun DataListItem(data: Data) { Column( modifier = Modifier .fillMaxWidth() .padding(5.dp) ) { Row( modifier = Modifier .fillMaxWidth() .padding(5.dp) ) { Image( painter = data.painter, contentDescription = null, contentScale = ContentScale.Crop, modifier = Modifier .size(32.dp) .clip(CircleShape) ) Text( text = data.name, fontSize = 12.sp, ) } } }