我在页面顶部有一个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
,但这也不起作用。
答案 0 :(得分:0)
在容器的底部留出一定的空白,以在容器和底部兄弟姐妹之间引入一些空白空间。像这样:
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(''),
)
),
答案 1 :(得分:0)
之所以发生这种情况,是因为由于您在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
小部件中。