Flutter 颤振ListView.builder有时显示空白或空数据

Flutter 颤振ListView.builder有时显示空白或空数据,flutter,listview,indexing,Flutter,Listview,Indexing,我有10个不同类别的250种产品的列表产品结构如下 class Product { final int productId; final int categoryId; final String nameEn; final String descriptionEn; Product( {this.productId, this.categoryId, this.nameEn, this.descriptionEn

我有10个不同类别的250种
产品的列表<代码>产品
结构如下

class Product {
  final int productId;
  final int categoryId;
  final String nameEn;
  final String descriptionEn;

  Product(
      {this.productId,
      this.categoryId,
      this.nameEn,
      this.descriptionEn
      });
}
根据所选类别,我喜欢使用
ListView.builder
显示产品列表。它在任何选定类别的开始处显示适当的
产品列表。使用后,如果我选择类别3或类别1,它会显示空列表。然后我调试打印以找出哪里出了问题。除了
itemsbuilder:(BuildContext,int-index)
value的
index
之外,一切看起来都很好。它不是从0开始迭代,而是从15、20、50甚至120开始迭代。如果当我选择类别1时,
索引
从30开始,那么我会得到空列表,因为类别1产品是
产品
列表的0-25索引。 下面是我的listView.builder

ListView.builder(
        itemCount: widget.products.length,
        itemBuilder: (BuildContext _, int index) {
          debugPrint('index is = $index');
          var categoryId = widget.products[index].categoryId;
          if (categoryId == selectedCategory) {
            int cartProductQty = 0;
            for (int i = 0; i < widget.cartProducts.length; i++) {
              if (widget.products[index].productId ==
                  widget.cartProducts[i].cartProductId) {
                cartProductQty = widget.cartProducts[i].cartProductQty;
              }
            }
            return SingleProduct(
              productId: widget.products[index].productId,
              productName: widget.products[index].nameBn,
              productCategory: widget.products[index].categoryId,
              cartProductQty: cartProductQty,
            );
          } else {
            return DoNothing();
          }
        },
      );
ListView.builder(
itemCount:widget.products.length,
itemBuilder:(BuildContext u,int索引){
debugPrint('index is=$index');
var categoryId=widget.products[index].categoryId;
如果(类别ID==selectedCategory){
int cartProductQty=0;
for(int i=0;i

我怎样才能解决这个问题。提前感谢。

仅当列表项的类别id与所选类别id匹配时,才返回列表项

ListView.builder(
itemCount:widget.products.length,
itemBuilder:(BuildContext u,int索引){
var categoryId=widget.products[index].categoryId;
返回selectedCategory==categoryId?:容器();
单产品(
productId:widget.products[index].productId,
productName:widget.products[index].nameBn,
productCategory:widget.products[index].categoryId,
cartProductQty:cartProductQty,
):容器();
},
);终于解决了


我没有将所有项目发送到
ListView.builder
,而是发送与所选类别匹配的项目。

谢谢@Abhishek singh,不幸的是,这不是解决方案。当所选类别与产品类别匹配时,我返回产品列表。当我选择category1或2或3,但索引从60或更高迭代时,问题就会出现,它应该从0开始,否则,我如何获取以前的数据。1:创建列表类型的变量2:创建一个以选定Id作为参数的函数3:仅使用选定类别编辑列表4:在此函数内调用setState 5:在ListView.builder中提供此列表。希望它能帮上忙谢谢你@Abhishek singh,它能帮上忙,但它会带来另一个问题。每次单击/选择一个类别时,新变量将填充该选定类别的产品,ListView将从该变量生成。现在,如果我点击某个产品的“收藏”按钮,它会自动转到同一索引产品的另一个类别。@HumayunKabir添加第一行,作为您的列表名。clear()它将删除以前添加的所有项目,并用所需项目填充列表。@Abhishek singh,我已经完成了。我将详细说明如何解决此问题。