交错网格视图无法在2列中显示数据

时间:2020-08-14 10:10:10

标签: flutter listview flutter-layout flutter-widget staggered-gridview

我是Dart的新手,所以如果这个问题似乎微不足道或不需要,我深表歉意!

我想为只有2列的Feed实现Pinterest样式的网格布局。我正在使用staggered_grid_layout,并尝试实现来自stackoverflow问题的答案。到目前为止,这是我的代码:

home.dart

SizedBox(
            height: 535,
            width: 180,
            child: new StaggeredGridView.countBuilder(
              crossAxisCount: 2,
              itemCount: 10,
              itemBuilder: (BuildContext context, int index) => Card(
                child: Column(
                  children: <Widget>[
                    Image.network(storiesList[index]),
                    Text("Some text"),
                  ],
                ),
              ),
              staggeredTileBuilder: (int index) =>
              new StaggeredTile.fit(2),
              mainAxisSpacing: 4.0,
              crossAxisSpacing: 4.0,
            ),
          )

link to full code

注意::我添加了SizedBox()是因为遇到了Vertical viewport was given unbounded height错误,如果还不行,请推荐一个替代方法

谢谢!

编辑:现在的外观

How it looks right now

编辑:外观如何

How it should look

2 个答案:

答案 0 :(得分:0)

感谢更新,请查看下面的代码,无需StaggeredGridView,而是使用GridTile,

GridView.count(
          physics: const NeverScrollableScrollPhysics(),
          scrollDirection: Axis.vertical,
          shrinkWrap: true,
          crossAxisCount: 2,
          childAspectRatio: 1.0,              
          padding: const EdgeInsets.all(4.0),
          mainAxisSpacing: 4.0,
          crossAxisSpacing: 4.0,
          children: new List<Widget>.generate(3, (index) {
            return new GridTile(
              child: InkResponse(
                child: new Card(
                // color:Colors.white,
                child: new Center(
                  child: new Text('XYZ'),
                 ),
                ),
                enableFeedback: true,
                onTap: () => _onSelected(index, items[index].toString().substring(0,10)), // Whatever you want on tap
                ),
              );
          }),
        ),

答案 1 :(得分:0)

CrossAxisCount 是您想要划分网格的“瓷砖”数量。 StaggeredTile.fit(x) 是您要用于 item[index] 的图块数。所以,如果 CrossAxisCount 是 2,如果你想要 2 列,StaggeredTile 应该是 fit(1)。你甚至可以说 CrossAxisCount 是 8 和 StaggeredTile.fit(4) 代表 2 列,StaggeredTile.fit(2) 代表 4 列......等等。通过这种方式,您可以根据为 StaggeredTile.fit 设置的任何条件更改每行的列数。