RangeError:RangeError(index):无效值:仅有效为0:3

时间:2020-07-10 18:44:37

标签: flutter dart

我在此屏幕篮中的篮子中显示了可用的产品,效果很好。我使用可解雇的物品来删除购物篮中的物品。而且我经常会不时收到该错误:RangeError:RangeError(索引):无效值:仅有效值为0:3.请做什么?

这是我的购物篮的界面。 Basket_Screen。扑扑清洁是最好的解决方案吗?恐怕要尝试。扑打干净到底能做什么?我需要一个解决方案

class PanierScreen extends StatefulWidget {


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

class _PanierScreenState extends State<PanierScreen> with AutomaticKeepAliveClientMixin {


  @override
  Widget build(BuildContext context) {
    List<Produit> produits = Provider.of<Panier>(context).produits ;
    Panier _panier = Provider.of<Panier>(context, listen : false);

    super.build(context);
    return  MaterialApp(
      debugShowCheckedModeBanner: false,
        title: "Panier",
        home: Scaffold(
          appBar: AppBar(
            title: Text("Panier"),
            centerTitle: true,
          ),
          body: Column(
            mainAxisSize: MainAxisSize.max,
            children: <Widget>[
              Expanded(child: ListView.separated(
                
          itemCount: produits.length,
                  itemBuilder: (BuildContext context, int index) {
                return  Dismissible(
                  key: UniqueKey(),
                  direction: DismissDirection.endToStart,
                  background: new  Container(
                child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    Center(
                      child: Icon(
                        Icons.delete, color: Colors.white,),
                    ),
                    Spacer(),
                    Text("Supprimer", style: TextStyle(fontWeight: FontWeight.bold, color: Colors.white),)
                  ],
                ),
                color: Colors.red,
                ),
                  onDismissed: (direction) {

                  //  _panier.retirerProduit(produits[index]);
                    produits.removeAt(index);
                    print(produits.length);
                    Scaffold.of(context).showSnackBar(new SnackBar(
                        content: new Text("Produit supprimé du panier"),
                    duration: Duration(seconds: 3),)); },


                  child: Card (
                    child: ListTile(
                      leading: CircleAvatar(
                        child: FittedBox(
                          child: Text("${produits[index].prixvente} FCFA"),
                        ),
                      ),
                      title: Text("${produits[index].designation}".toUpperCase(), style: TextStyle(fontWeight: FontWeight.bold),),
                      subtitle: Text("Total : ${produits[index].quantite_vendue * produits[index].prixvente} FCFA", style: TextStyle(fontWeight: FontWeight.bold, color: Colors.red[300]), ),
                      trailing: Text("${produits[index].quantite_vendue.toString()} x", style: TextStyle(fontWeight: FontWeight.bold),),
                    ),
                  ),
                );
              },
                  separatorBuilder: (BuildContext context, int index) => Divider(),
                  ))
            ],
          ),
        ),
    );
  }
  @override
  // TODO: implement wantKeepAlive
  bool get wantKeepAlive => true;
}

1 个答案:

答案 0 :(得分:0)

flutter clean将重建/ build文件夹(Flutter的构建缓存)。这是一个安全的命令,但是与您的问题无关。

似乎您要从List produits中删除某个索引项,并尝试在代码中访问后者。