可以将图标、文本等信息按多行多列方式布局的组件。
属性 | 说明 |
---|---|
gridDelegate | 控制GridView中子元素排列(SliverGridDelegateWithFixedCrossAxisCount) |
SliverGridDelegateWithFixedCrossAxisCount
属性 | 说明 |
---|---|
crossAxisCount | 交叉轴的子元素数量 |
mainAxisSpacing | 主轴方向子元素间距 |
crossAxisSpacing | 交叉轴方向子元素间距 |
childAspectRatio | 宽度与高度的比值 |
SliverGridDelegateWithMaxCrossAxisExtent | |
属性 | 说明 |
– | – |
maxCrossAxisExtent | 交叉轴最大数量子元素 |
1.GridView()
会一次性全部渲染children中的所有子元素组件,适用于有限个数子元素的场景。
class MyState extends State {
Widget build(BuildContext context) {
List<Widget> teList = [];
for (int i = 0; i < 12; i++) {
TextButton e = TextButton(
onPressed: () {},
child: Column(children: [Icon(Icons.account_box_rounded), Text("个人")]),
);
teList.add(e);
}
GridView gridView = GridView(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4,
childAspectRatio:1.8
),
children: teList,
);
return Scaffold(
appBar: AppBar(title: Text(""), centerTitle: true),
body: gridView,
);
}
}
- GridView.count()
用于设置交叉轴方向子元素的个数。
class MyState extends State {
Widget build(BuildContext context) {
List<Widget> teList = [];
for (int i = 0; i < 12; i++) {
TextButton e = TextButton(
onPressed: () {},
child: Column(children: [Icon(Icons.account_box_rounded), Text("个人")]),
);
teList.add(e);
}
GridView gridView = GridView.count(
crossAxisCount: 3,
mainAxisSpacing: 3,
crossAxisSpacing: 3,
children: teList,
);
return Scaffold(
appBar: AppBar(title: Text(""), centerTitle: true),
body: gridView,
);
}
}
- GridView.extent()
用于设置子元素在交叉轴方向的最大可能长度。
GridView gridView2 = GridView.extent(
maxCrossAxisExtent: 99,
children: teList,
);
- GridView.builder
动态创建子元素,用于子元素比较多或者数量不确定的情况。
itemCount设置最大数量,如果不设置itemCount,会一直创建item。
class MyState extends State {
List<int> intList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
List<Widget> wList = [];
Widget build(BuildContext context) {
for (int i = 0; i < intList.length; i++) {
int k = intList[i];
Text text = Text(k.toString());
wList.add(text);
}
GridView gridView = GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4,
),
itemBuilder: (context, index) {
return wList[index];
},
itemCount: 10,
);
return Scaffold(
appBar: AppBar(title: Text("222222222")),
body: gridView,
);
}
}