flutter GridView 超过父级高度自动比例缩放该怎么写
时间: 2023-07-31 10:09:57 浏览: 44
Flutter中的`GridView`也可以通过设置`shrinkWrap`属性来实现自适应高度。
1. 使用`shrinkWrap`属性
在`GridView`中设置`shrinkWrap`属性为`true`,这样`GridView`就会自动适应内容的高度,而不是固定高度。例如:
```
GridView.count(
shrinkWrap: true,
crossAxisCount: 2,
children: List.generate(100, (index) {
return Center(
child: Text(
'Item $index',
style: Theme.of(context).textTheme.headline5,
),
);
}),
);
```
2. 动态计算`GridView`高度
如果不想使用`shrinkWrap`属性,可以通过编程的方式计算`GridView`的高度并设置。例如:
```
GridView.count(
physics: NeverScrollableScrollPhysics(),
crossAxisCount: 2,
children: List.generate(100, (index) {
return Center(
child: Text(
'Item $index',
style: Theme.of(context).textTheme.headline5,
),
);
}),
),
```
这段代码会禁用`GridView`的滚动,然后计算`GridView`的高度并设置`Container`的高度。需要注意的是,计算`GridView`高度时要考虑到每行的间距。例如:
```
double itemHeight = 100.0;
double spacing = 10.0;
int crossAxisCount = 2;
int itemCount = 100;
double gridViewHeight = (itemCount / crossAxisCount).ceil() *
(itemHeight + spacing) -
spacing;
Container(
height: gridViewHeight,
child: GridView.count(
crossAxisCount: crossAxisCount,
children: List.generate(itemCount, (index) {
return Center(
child: Text(
'Item $index',
style: Theme.of(context).textTheme.headline5,
),
);
}),
mainAxisSpacing: spacing,
crossAxisSpacing: spacing,
),
);
```
这段代码会计算`GridView`的高度并设置`Container`的高度。需要注意的是,计算`GridView`高度时要考虑到每行的间距。