【发布时间】:2026-01-02 06:40:01
【问题描述】:
我正在尝试创建一个凸起按钮的网格视图,但网格的行之间存在大量空间,如下图所示:
我正在使用页面底部的代码实现 GridView:
如你所见,我设置了:
SliverGridDelegateWithMaxCrossAxisExtent(maxCrossAxisExtent: 150, mainAxisSpacing: 4, crossAxisSpacing: 4),
我本来希望设置主轴间距和横轴间距应该删除这些空间。
我还尝试在一个大小合适的框中返回 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,),),
],
),
【问题讨论】:
-
谢谢,但文字不是问题。我在图像中理解文本溢出,但这不是我的问题。我只是将文本大小设置为 2,行之间的空间仍然存在。
-
对不起,好吧,你为什么要使用
maxCrossAxisExtent: 150, -
我只是在玩设置,正如我在问题中所说,我也尝试使用固定数量的列,但这也不会改变它。
-
实际上,使用
Wrap小部件可以更轻松地完成您想要完成的任务。 wrap 小部件类似于 Row 或 Column 小部件,具有一个额外的优点是它可以根据屏幕上可用的空间调整其子级。你考虑过这个解决方案吗?示例:flutter-widget.live/widgets/Wrap
标签: flutter flutter-layout flutter-gridview