flutter - 列表视图中的颤振包装小部件
问题描述
我想将列包装起来,listview
以便向下滚动时,搜索栏会消失。我试过这样
new ListView(
shrinkWrap: true,
children: <Widget>[
new Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
new GestureDetector(
child: new Container(
color: Colors.grey[300],
child: new Padding(
padding: const EdgeInsets.all(8.0),
child: new Card(
margin: const EdgeInsets.fromLTRB(4.0, 0.0, 4.0, 0.0),
child: new ListTile(
leading: new Icon(Icons.search),
title: new Text('Search',
style: new TextStyle(color: Colors.grey[600])),
),
),
),
),
onTap: () {
print(
'tapped');
},
),
new GridView.builder(
itemCount: items.length,
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2),
itemBuilder: (BuildContext context, int index) {
return new GestureDetector(
child: new Card(
elevation: 5.0,
child: new Container(
decoration: new BoxDecoration(
image: new DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(
'https://images.unsplash.com/photo-1533514114760-4389f572ae26?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=4ada6181447db788f0fc94d5d2e35c63&auto=format&fit=crop&w=500&q=60'),
),
),
),
),
onTap: () {
showDialog(
barrierDismissible: false,
context: context,
child: new AlertDialog(
title: new Column(
children: <Widget>[
new Text("GridView"),
new Icon(
Icons.favorite,
color: Colors.green,
),
],
),
content: new Text("Selected Item $index"),
actions: <Widget>[
new FlatButton(
onPressed: () {
Navigator.of(context).pop();
},
child: new Text("OK"))
],
),
);
},
);
},
),
],
),
],
),
但是列表视图是不可见的,控制台说
垂直视口被赋予了无限的高度。视口沿滚动方向扩展以填充其容器。
我尝试了插入expanded
,shrinkwrap
但仍然没有显示任何内容。有人知道怎么修这个东西吗?
解决方案
您的搜索字段小部件不需要列,直接使用即可。从您的父 ListView 中删除shrinkWrap
. 添加shrinkWrap
到您的 GridView 并指定物理:
new ListView(children: <Widget>[
new GestureDetector(
child: new Container(
color: Colors.grey[300],
child: new Padding(
padding: const EdgeInsets.all(8.0),
child: new Card(
margin: const EdgeInsets.fromLTRB(4.0, 0.0, 4.0, 0.0),
child: new ListTile(
leading: new Icon(Icons.search),
title: new Text('Search',
style: new TextStyle(color: Colors.grey[600])),
),
),
),
),
onTap: () {
print('tapped');
},
),
GridView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: items.length,
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2),
itemBuilder: (BuildContext context, int index) {
return new GestureDetector(
child: new Card(
elevation: 5.0,
child: new Container(
decoration: new BoxDecoration(
image: new DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(
'https://images.unsplash.com/photo-1533514114760-4389f572ae26?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=4ada6181447db788f0fc94d5d2e35c63&auto=format&fit=crop&w=500&q=60'),
),
),
),
),
onTap: () {
showDialog(
barrierDismissible: false,
context: context,
child: new AlertDialog(
title: new Column(
children: <Widget>[
new Text("GridView"),
new Icon(
Icons.favorite,
color: Colors.green,
),
],
),
content: new Text("Selected Item $index"),
actions: <Widget>[
new FlatButton(
onPressed: () {
Navigator.of(context).pop();
},
child: new Text("OK"))
],
),
);
},
);
},
)
]
)