介绍
GridView 是 Flutter 中用于创建网格布局的滚动小部件。它可以创建多列布局,并且每个网格单元可以包含一个小部件。
GridView 提供了几种构造函数来创建不同类型的网格布局:
GridView
:最通用的构造函数,完全自定义网格布局。GridView.builder
:按需构建网格项,适用于具有大量(或无限)网格项的动态内容。GridView.count
:指定网格中的列数,适用于具有固定数量列的网格。GridView.extent
:指定网格中最大交叉轴范围(例如,最大列宽),适用于需要控制列宽的网格。GridView.custom
:这个构造函数提供了最高级别的自定义能力,允许使用自定义的SliverGridDelegate和SliverChildDelegate。
GridView 的属性
主要属性:
gridDelegate
:控制网格布局的结构和布局。通常使用 SliverGridDelegateWithFixedCrossAxisCount(固定列数)或 SliverGridDelegateWithMaxCrossAxisExtent(固定最大列宽)。children
:网格中显示的小部件列表。只在使用默认构造函数 GridView 时使用。scrollDirection
:滚动方向,可以是Axis.horizontal(水平滚动)或Axis.vertical(垂直滚动)。padding
:网格周围的内边距。crossAxisSpacing
和mainAxisSpacing
:网格项之间的间距。childAspectRatio
:网格项的宽高比。shrinkWrap
: 使GridView的高度适应其内容,为true时占用其内容所需的最小空间,为false时占用尽可能多的空间。
注意:如果你有一个ListView或SingleChildScrollView并且想在其中包含一个GridView,一般设置shrinkWrap: true确保GridView的高度仅基于其内容大小,而不是尝试滚动,或者包含在固定高度的容器中再或者放在Expanded中使其可以扩展,不然会报错不显示GridView!
physics
: 定义滚动行为的物理引擎,可选值为AlwaysScrollableScrollPhysics()始终允许滚动,BouncingScrollPhysics()边缘出现弹跳效果,ClampingScrollPhysics()滚动到边缘时会自动停止,NeverScrollableScrollPhysics()静态内容不需要滚动,一般常用的是这个并且可以去除GridView的边缘滑动效果。
看下图可以更好的理解: