itemBulder跳至下一个项目

时间:2019-11-27 11:32:08

标签: flutter dart

我是新手程序员,

itembuilder中如何跳转到下一个索引项?

      return ListView.builder(
        itemCount: s.data.length,
        itemBuilder: (_, index){
          if(s.data[index]["count"].toString() == "0") return new Text('');

          image1 = s.data[index]["image"];
          if(image1 == null){
            image2 = imageSrc;
          }else{
            image2 = s.data[index]["image"]["src"];
            print(s.data[index]);
          }

我用过

if(s.data[index]["count"].toString() == "0") return new Text('');

但是,项目之间的空间已创建。

3 个答案:

答案 0 :(得分:0)

我假设您想跳过某些项目。如果您使用的是Dart 2.3+,则可以使用collection ifcollection for来完成。但是,在用例中,最简单的方法是将Text('')替换为const SizedBox()。小部件树中将有一个小部件,但高度/宽度为0时,它将不会显示在屏幕上并占用任何空间,并且作为const小部件,不应重新构建。

答案 1 :(得分:0)

假设我已正确理解,您想跳过count为零的项目的构建。

保留该代码,您可以返回SizedBox.shrink()而不是Text('')(这是一个零大小的容器)。

更好的方法是过滤s.data并将其用于您的ListView.builder

List<?> filteredData = s.data.where((item) => item["count"].toString() != 0).toList();

其中?代表您的数据类型。

我不知道您为什么使用toString,如果count是整数,则更好的方法是:

List<?> filteredData = s.data.where((item) => item["count"] != 0).toList();

,然后将s.data中的filteredData替换为ListView.builder

答案 2 :(得分:0)

尝试返回不占用任何空格的ContainerSizedBox

 if(s.data[index]["count"].toString() == "0") return Container(width: 0,height: 0,);