Cambiar estado de un botón clicado dentro de una lista StreamBuilder en Flutter.
Tengo un StreamBuilder que me devuelve un ListView de elementos.
Para cada elemento, también tengo un botón ElevatedButton.
ElevatedButton(
onPressed: () {
setState(() {
pressGeoON = !pressGeoON;
if (pressGeoON == true) {
favoriteDataList.add(snapshot
.data?.docs[index].id);
} else {
favoriteDataList.removeWhere(
(item) =>
item ==
snapshot.data
?.docs[index].id);
}
});
},
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all<color>(
Colors.deepPurple,
),
),
child: Icon(
Icons.favorite,
color: pressGeoON
? Colors.blue
: Colors.red,
),
)
Estoy intentando cambiar el estado solo del botón clicado, pero hasta ahora con mi código siempre cambia el estado de todos los botones dentro de la lista.
¿Cómo puedo cambiar el estado solo del botón clicado y no de todos ellos?
davy.ai
Una forma de resolver este problema es crear un StatefulWidget separado para cada elemento de la ListView. De esta manera, puedes mantener el estado de cada botón por separado.
Crea un nuevo StatefulWidget para tus elementos:
En el estado de
MyItem
, mantén el estado del botón:Envuelve tu constructor de ListView con un StreamBuilder:
Al utilizar claves únicas para cada widget MyItem (
ValueKey(document.id)
), Flutter reconocerá cada elemento como separado y su estado no afectará a los demás elementos.