dart - 如何在组中创建 ListView?

标签 dart flutter

在 API 中返回 20 条这样的记录,

[ { ... "p":1.0 ... }, { ... "p":1.1 ... }, { ... "p":2.0 ... }, { "p":2.1 }, { "p":3.0 }, { "p":3.1 }, ]

1.0 到 1.1 表示第一行,2.0 到 2.1 表示第二行

我创建了 Listview 并使用了其他逻辑,但我不知道如何在图像下方进行分组?

Widget createListView(BuildContext context, AsyncSnapshot snapshot) {
    List<Data> values = snapshot.data;
    return ListView.builder(
      padding: new EdgeInsets.only(top: 8.0, right: 0.0, left: 0.0),
      itemCount: getItemCounter(values),
      itemBuilder: (BuildContext context, int index) {
        return GridView.count(
          physics: ScrollPhysics(),
          shrinkWrap: true,
          crossAxisCount: 4,
          children: List.generate(2, (index) {
            return GridTile(
              child: GestureDetector(
                onTap: () => Navigator.push(
                    context,
                    MaterialPageRoute(
                        builder: (context) =>
                            assets2(values[index].i, widget._url))),
                child: Column(
                  children: [
                    Card(
                      child: Container(
                        decoration: BoxDecoration(
                            border: Border.all(
                                color: Colors.blueAccent, width: 1.5)),
                        child: Stack(
                          children: <Widget>[
                            SvgPicture.asset(
                              'assets/images/icon1.svg',
                              height: 50.0,
                            ),
                          ],
                        ),
                      ),
                    ),

                    Expanded(
                      child: Text(values[index].d, textAlign: TextAlign.center, style: TextStyle(fontSize: 10.0),),
                    ),
                  ],
                ),
              ),
            );
          }),
        );
      },
    );
    //    itemCount: 10,
  }

  getItemCounter(List<Data> values){
    List iPoint = [];
    List distictI = [];

    for(int i = 0; i < values.length; i++){
      iPoint.add(values[i].p.toInt());
    }
    //remove duplicate
    distictI = iPoint.toSet().toList();
   return distictI.length;

  }

我需要喜欢这个输出, enter image description here

最佳答案

我在我的项目中做了类似的事情。

CustomScrollViewSliverList 一起使用,并将 GridViewprimary: false 一起使用

这是您的示例的特定代码:

class M extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final data = [
      {"p": 1.0},
      {"p": 1.1},
      {"p": 2.0},
      {"p": 2.1},
      {"p": 3.0},
      {"p": 3.1},
    ];
    final listCount =
        data.map<double>((m) => m["p"]).reduce((a, b) => max(a, b)).floor();
    return CustomScrollView(
      slivers: <Widget>[
        SliverList(
          delegate: SliverChildBuilderDelegate(
            (context, i) {
              final items = data
                  .where((m) => i + 1 <= m["p"] && m["p"] < i + 2)
                  .toList(growable: false)
                    ..sort((a, b) => a["p"].compareTo(b["p"]));
              return GridView.builder(
                itemCount: items.length,
                shrinkWrap: true,
                primary: false,
                gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
                  maxCrossAxisExtent: 70.0,
                  childAspectRatio: 0.9,
                ),
                itemBuilder: (context, i) {
                  final item = items[i];
                  //TODO implement this method to build individual item
                  return _buildItem(item);
                },
              );
            },
            childCount: listCount,
          ),
        ),
      ],
    );
  }
}

编辑:添加了特定问题的代码示例。 代码美化。

关于dart - 如何在组中创建 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55533857/

相关文章:

flutter - 从 Firestore 检索数据并在 GridView.builder flutter 中显示

firebase - 如何将Firebase存储项存储到本地缓存以节省带宽成本?

Flutter + webrtc 房间视频通话

flutter - 遍历列表和 map 列表

google-maps - 如何在 flutter 中在谷歌地图上绘制多段线

flutter - SlidingUpPanel 中的 ListView 滚动

flutter - flutter 柱删除空间之间的子项

flutter - 在 Flutter 的 main/App 类中调用方法?

flutter - 打印出所有hashMap值

dart - 在 Flutter 中实现确定的 CircularProgressIndicator?