防止BoxShadow被父项裁剪

时间:2019-02-02 09:55:26

标签: flutter flutter-layout

我正在用框阴影构建自己的类似于材料的卡片。我想将其中的几个组合成一个PageView,以便我可以在卡之间滑动-每个Card都应填满整个屏幕宽度。 卡片具有BoxShadow作为装饰,但是将Card插入PageView(或任何其他包装小部件)时,BoxShadow将被剪切而消失PageView的边界框。

可以通过将Card包装到Padding中来解决此问题,但这不是我想要的,因为我希望由最外面的小部件给整个视图的所有子小部件提供填充-这样一来,如果我的填充发生变化,就不必更改每个小部件。

这是我的Card代码的样子:

class Card extends StatelessWidget {
  final Widget child;
  final EdgeInsetsGeometry padding;

  Card({@required this.child, this.padding});

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(color: Colors.white, boxShadow: <BoxShadow>[
        BoxShadow(color: Color.fromRGBO(0, 0, 0, 0.1), blurRadius: 14.0),
        BoxShadow(
            color: Color.fromRGBO(0, 0, 0, 0.1),
            offset: Offset(0, 2),
            blurRadius: 2.0)
      ]),
      child: Padding(
        padding: padding ?? EdgeInsets.all(20),
        child: this.child,
      ),
    );
  }
}

包装其中的几种会导致所描述的裁剪行为。

是否有一种方法告诉Flutter不要裁剪掉“漏出”的内容? 当将小部件放置在堆栈中而没有反弹时,也会发生相同的行为。

1 个答案:

答案 0 :(得分:1)

您可以使用边距:

...
Container(
  margin: EdgeInsets.all(10), 
..

也许您会对viewportFraction PageController参数感兴趣:

final PageController controller = PageController(
  viewportFraction: 1,
);
...
PageView.builder(
  controller: controller,

它会缩小PageView中页面的大小,因此最近的页面变得可见。

enter image description here