我有一个Container
在页面的顶部有BoxShadow
装饰,在Container
下面是一个ListView
,里面有许多Cards
。我希望顶级Container
有一个投影出现在ListView
的项目前面,但这是我得到的:
投影似乎出现在Cards
后面,而不是在它前面。这是代码:
Widget _buildBody(BuildContext context, ChecklistModel model){
return Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
decoration: BoxDecoration(
color: Colors.red.shade200,
boxShadow: [BoxShadow(
color: Colors.red.shade200,
offset: Offset(0, 10),
blurRadius: 10,
spreadRadius: 10
)]
),
child: ListTile(
title: Text(''),
)
),
Expanded(child: Padding(
padding: const EdgeInsets.all(10),
child: _buildCheckpointListView(context, model))
)
],
)
);
}
我也尝试用Container
替换Card
,但这也不起作用。
它正在发生,因为你在Expanded
中使用Column
小部件,它占据了屏幕上的所有可用空间,因此看起来它与Container
重叠,但实际上它只是重叠阴影。
而不是Column
小部件,使用Stack
显示Container
上方的ListView
。您可以使用Positioned
小部件来定位Stack的子小部件。
但在这种情况下,请确保将Container
代码放在ListView
代码之后,以便它始终位于顶部。
例:
Stack(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(10),
child: _buildCheckpointListView(context, model)
),
Positioned(
top: 0.0, //To align Container at the top of screen
left: 0.0,
right: 0.0,
child: Container(
decoration: BoxDecoration(
color: Colors.red.shade200,
boxShadow: [
BoxShadow(
color: Colors.red.shade200,
offset: Offset(0, 10),
blurRadius: 10,
spreadRadius: 10
)]
),
child: ListTile(
title: Text(''),
)
),
),
]
)
如果你想从顶部提供一定的余量,你也可以在ListView
小部件中包装Positioned
。
给容器一个底部边距,在容器和底部兄弟之间引入一些空的空间。像这样 :
Container(
margin: EdgeInsets.only(bottom: 20),
decoration: BoxDecoration(
color: Colors.red.shade200,
boxShadow: [BoxShadow(
color: Colors.red.shade200,
offset: Offset(0, 10),
blurRadius: 10,
spreadRadius: 10
)]
),
child: ListTile(
title: Text(''),
)
),