Boxshadow出现在其他小部件的后面
问题内容:
我有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
小部件来放置堆栈的子小部件。
但是在这种情况下,请确保将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
小部件内。