我正在尝试创建一个以卡片作为列表元素的网格视图页面,最后一张卡片从底部被剪切。以下是相关代码片段:
创建列表正文.dart
List<String> services = [
'Demo1',
'Demo2',
'Demo3',
'Demo4',
'Demo5',
'Demo6',
'Demo7',
'Demo8',
'Demo9',
'Demo10',
];
@override
Widget build(BuildContext context) {
return Container(
height: MediaQuery.of(context).size.height,
child: GridView.count(
crossAxisCount: 2,
crossAxisSpacing: 2.0,
mainAxisSpacing: 2.0,
children: services.map((String serviceName){
return Container(
child:Card(
color: Colors.grey[500],
elevation: 15,
semanticContainer: true,
shadowColor: palletFuchsia,
shape: CircleBorder(),
child: InkWell(
onTap: (){
print("Tapped "+serviceName);
},
child: Center(
child: Text(
serviceName,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 25
),
),
),
),
)
);
}).toList(),
),
);
}
列表屏幕.dart
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: palletWhiteDrawer,
drawer: Theme(
data: Theme.of(context).copyWith(
canvasColor: palletYellowDrawer,
),
child: CreatDrawerWidget(),
),
appBar: CreateAppBar(),
body:GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
FocusScope.of(context).requestFocus(new FocusNode());
},
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ServiceListBody()
],
)
),
),
);
}
屏幕截图x1c 0d1x
我是一个完全新的扑,所以,对不起,如果有一些愚蠢的错误。但任何帮助将是有用的。谢谢你的时间!
3条答案
按热度按时间mwngjboj1#
只是为了探索,你可以做
height: MediaQuery.of(context).size.height *2,
,它不应该再被削减了,对吗?溶液1
你告诉你的容器一个给定的高度,这是固定的时刻,无论有多少项目,你得到了你的
ListView
。例如,您可以将
ConstrainedBox
与shrinkWrap:true
配合使用,并管理您的最大高度更多信息:https://api.flutter.dev/flutter/widgets/ConstrainedBox-class.html
溶液2
使用
Slivers
,它们是动态的。为此,你需要定制你的结构,你用一个
CustomScrollView()
来 Package 所有的东西,SliverToBoxAdapter()
用于固定元素,SliverList()
用于动态元素,使它像一个魅力。使用
CustomScrollView
和SliverToBoxAdapter
的示例:您可以使用
SizedBox
height
定义高度。您还可以在CustomScrollView
上为整个视图应用漂亮的效果切片列表示例:
有关薄片的信息:https://medium.com/flutterdevs/explore-slivers-in-flutter-d44073bffdf6
klsxnrf12#
GridView
小部件本身就是Scrollable
,因此您不必使用Column
和SingleChildScrollView
小部件 Package 它...现在,如果圆圈从屏幕上消失,您只需向下滚动即可如果你想让所有的圆都适合屏幕..你必须使用
var mobileHeight = MediaQuery.of(context).size.height
然后每个圆的高度将是
mobileHeight
除以垂直方向上的圆数。sxissh063#
在网格视图上添加:
包裹收缩:真
物理:常量反弹滚动物理()