首页 > 解决方案 > 颤动的 ListView.builder 有时会显示空白或空数据

问题描述

我有Products10 个不同类别的 250 个列表。Product结构如下

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. Product它在开始时显示任何选定类别的正确列表。使用一段时间后,如果我选择类别 3 或类别 1,它会显示空列表。然后我 debugPrint 找出哪里出错了。一切看起来都很好,除了index价值itemBuilder: (BuildContext _, int index)。它不是从 0 迭代,而是从 15 或 20 或 50 或有时 120 迭代。如果index当我选择类别 1 时从 30 开始,那么我会得到空列表,因为类别 1 产品是Product列表的 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();
          }
        },
      );

我该如何解决这个问题。提前致谢。

标签: flutterlistviewindexing

解决方案


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

 ListView.builder(
            itemCount: widget.products.length,
            itemBuilder: (BuildContext _, int index) {
              var categoryId = widget.products[index].categoryId;          
              return selectedCategory == categoryId ?:Container();
              SingleProduct(
                  productId: widget.products[index].productId,
                  productName: widget.products[index].nameBn,
                  productCategory: widget.products[index].categoryId,
                  cartProductQty: cartProductQty,
                ):Container();
            },
          );


推荐阅读