【问题标题】:flutter ListView.builder is showing blank or empty data sometimes颤动的 ListView.builder 有时会显示空白或空数据
【发布时间】:2021-02-04 06:25:40
【问题描述】:

我有 10 个不同类别的 250 个 Products 列表。 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 找出哪里出错了。除了 indexitemBuilder: (BuildContext _, int index) 值之外,一切看起来都很好。它不是从 0 迭代,而是从 15 或 20 或 50 或有时 120 迭代。如果index 在我选择类别 1 时从 30 开始,那么我会得到空列表,因为类别 1 产品是 0-25 的索引Product 列表。 下面是我的 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();
          }
        },
      );

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

【问题讨论】:

    标签: flutter listview indexing


    【解决方案1】:

    仅当其类别 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();
                },
              );

    【讨论】:

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

    终于解决了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2021-11-01
      相关资源
      最近更新 更多