Box Shadow出现在其他小部件后面

问题描述 投票:1回答:2

我有一个Container在页面的顶部有BoxShadow装饰,在Container下面是一个ListView,里面有许多Cards。我希望顶级Container有一个投影出现在ListView的项目前面,但这是我得到的:

enter image description here

投影似乎出现在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,但这也不起作用。

flutter flutter-layout
2个回答
0
投票

它正在发生,因为你在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


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(''),
          )
      ),
© www.soinside.com 2019 - 2024. All rights reserved.