Boxshadow 出现在其他小部件后面

Mag*_*s W 9 flutter flutter-layout

我在页面顶部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))
                )
            ],
        )
    );
}
Run Code Online (Sandbox Code Playgroud)

我也尝试用Containera替换Card,但这也不起作用。

Sid*_*kar 2

发生这种情况是因为由于您Expanded在内部使用了一个小部件Column,它占用了屏幕上的所有可用空间,因此看起来它与Container但实际上它只是与阴影重叠。

Column使用 a代替小部件Stack来显示Container上面的ListView. 您可以使用Positionedwidget 来定位 Stack 的子 widget。

但在这种情况下,请确保将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(''),
        )
     ),
    ),
  ]
)
Run Code Online (Sandbox Code Playgroud)

如果您想从顶部提供一定的边距,您也可以将您包裹ListView在一个小部件内。Positioned

  • 好的!但ListView肯定需要从顶部偏移,否则顶部列表项将被Container覆盖,从而无法访问。如果容器的高度未知,知道如何实现这一点吗? (2认同)