Flutter删除GridView行之间的空间

Nic*_*uir 3 flutter flutter-layout flutter-gridview

我正在尝试创建一个凸起按钮的gridview,但是在网格的各行之间有大量空间,如下图所示:

在此处输入图片说明

我正在用页面底部的代码实现GridView:

如您所见,我设置了:

SliverGridDelegateWithMaxCrossAxisExtent(maxCrossAxisExtent: 150, mainAxisSpacing: 4, crossAxisSpacing: 4), 
Run Code Online (Sandbox Code Playgroud)

我曾希望设置主轴间距和横轴间距会删除这些间距。

我还尝试过在大小框中返回gridview并将其更改为SliverGridWithFixedCount,但似乎没有任何更改。

我不确定我在布局中做错了什么吗?

谢谢你的帮助

body: Column(
        children: <Widget>[
          Flexible(
            child: filtersGridView(),
          ),
        ],
      ),
    );
  }
}


class filtersGridView extends StatefulWidget {
  @override
  _filtersGridViewState createState() => _filtersGridViewState();
}

class _filtersGridViewState extends State<filtersGridView> {

  final List <DocumentSnapshot> documents;
  _filtersGridViewState({this.documents});

  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
      stream: Firestore.instance.collection('categories').snapshots(),
      builder: (BuildContext context, AsyncSnapshot snapshot) {
        if (!snapshot.hasData) {
          return Center(child: const Text('Loading events...'));
        }
        return GridView.builder(
          gridDelegate:
          SliverGridDelegateWithMaxCrossAxisExtent(maxCrossAxisExtent: 150, mainAxisSpacing: 4, crossAxisSpacing: 4),
          itemBuilder: (BuildContext context, int index) {
            return Column(children: <Widget>[
              InkWell(
                onTap: () {

                },
                child: SizedBox(
                  height: 30,
                  child: RaisedButton(
                    color: Colors.white,
                    child: Row(
                      children: <Widget>[
                        Text(snapshot.data.documents[index]['name'].toString(), textAlign: TextAlign.center, style: TextStyle(fontSize:  15, color: Colors.black,),),
                         ],
                    ),
Run Code Online (Sandbox Code Playgroud)

Geo*_*rge 7

如果您担心按钮内部的填充-发生这种情况的原因是将材质按钮的最小宽度设置为88

另外,根据我的经验,我发现实质性按钮周围有一些怪异的边缘。我用解决了materialTapTargetSize: MaterialTapTargetSize.shrinkWrap

ButtonTheme(
  minWidth: 0,
  height: 30,
  child: RaisedButton(
    materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
    // ...
  )
)
Run Code Online (Sandbox Code Playgroud)

如果您希望按钮填充整个maxCrossAxisExtent高度,请使用RawMaterialButton分配的自定义约束。


更新

我以为问题出在按钮内,但我发现实际上是关于GridView委托的。

如何SliverGridDelegateWithMaxCrossAxisExtent运作按扑文档:

This delegate creates grids with equally sized and spaced tiles.

childAspectRatio代表属性的默认值为1.0,即-一个正方形。您将获得显示完美的逻辑布局-1:1块的网格。

为了解决这个问题,您需要提出正确的childAspectRatio价值。

一些伪代码:cellHeight = cellWidth / childAspectRatio

例如 childAspectRatio: 2将显示大小如下的单元格:

        2
-----------------
|               |
|               | 1
|               |
-----------------
Run Code Online (Sandbox Code Playgroud)

请告诉我是否有帮助。