He hecho una lista (_cost) en Flutter y una vista de una tarjeta, siempre que cada uno de ellos se haga clic en el usuario, se mostrará un valor relacionado con el índice de esa tarjeta (_cost), pero el problema es cada vez que Haz clicado en una tarjeta que muestra el nulo a pesar de que el valor relacionado en la lista no es nulo.

class ActivityPeopleCard extends StatefulWidget{

  Activity activity;
  ActivityPeopleCard({this.activity});


  @override
  _ActivityPeopleCardState createState() => _ActivityPeopleCardState();
}

class _ActivityPeopleCardState extends State<ActivityPeopleCard> {

   List<double> _cost;


  @override
  Widget build(BuildContext context) {
    _cost = new List(widget.activity.peopleInvolved.length);

    return Container(
      child:new GridView.builder(
        itemCount: widget.activity.peopleInvolved.length,
        gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3), 

        itemBuilder: (BuildContext context, int index) {
          return new GestureDetector(
            onTap: ()=> setState(() => {_priceSet(index)}),
            child: _buildWidget(index)
            );
          },
        ),         
      );
   }
_buildWidget(int index){
  return new Card(
    shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)),
    elevation: 5.0,
    child: Stack(children:<Widget>[               
      new Container(
        height: height/4,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Container(
              width:height/15,
              height: height/15,         
              decoration: new BoxDecoration(
                borderRadius: BorderRadius.circular(height/20),
                border: Border.all(color: Colors.white, width:2),       
            ),
            child: ClipRRect(
              borderRadius: BorderRadius.circular(height/15),
              child: Image.asset(widget.activity.peopleInvolved[index].imagePath, fit: BoxFit.fill)),
                Center(child: Text(widget.activity.peopleInvolved[index].name))
           ],
         ),
       ),
     ])
   );
 }

_priceSet(int index){
  setState(() {
    _cost[1]=5500;
  });

Incluso configuro _cost [1] a 5500 en la función _priceSet, pero muestra nulo en su lugar

0
ATA 25 jun. 2019 a las 23:02

1 respuesta

La mejor respuesta

Cuando llame al estado de setstate en _priceSet, se vuelve a ejecutar el método de compilación en su _ActivityCardPeopleState, que a su vez se vuelve a inicializar su lista _cost sin valores presentes (a pesar de que configure uno en su {{ X2}} Método.)

Considere la inicialización de la variable _cost en su widget de estado (ActivityPeopleCard), y luego pasarlo al estado (_ActivityPeopleCardState)

0
Jason 25 jun. 2019 a las 20:28