我有Container一个BoxShadow在页面的顶部装饰,下面Container是ListView与一些Cards在里面。我希望顶部Container有一个阴影出现在中的项目前面ListView,但这是我得到的:
Container
BoxShadow
ListView
Cards
阴影似乎出现在的后面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,但这也不起作用。
Card
发生这种情况的原因是,由于您在Expanded内部使用了小部件Column,因此它占用了屏幕上的所有可用空间,因此看起来好像是在重叠,Container但是实际上只是在阴影上。
Expanded
Column
代替Column小部件,使用Stack来显示Container上方的ListView。您可以使用Positioned小部件来放置堆栈的子小部件。
Stack
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小部件内。