代码之家  ›  专栏  ›  技术社区  ›  Philip Feldmann

防止父级剪裁BoxShadow

  •  0
  • Philip Feldmann  · 技术社区  · 6 年前

    我正在制作我自己的材质,比如带有盒子阴影的卡片。我想把其中几个组合成一个整体 PageView ,这样我可以在每张卡之间滑动 Card 应该填满整个屏幕的宽度。 卡片上有一个 BoxShadow 但是,当插入 卡片 进入 页面浏览 (或任何其他包装小部件) 箱形阴影 当它被 页面浏览 的边界框。

    这可以通过包裹 卡片 变成一个 Padding ,但这不是我想要的,因为我更喜欢最外层的小部件提供的填充,而不是整个视图的所有子小部件——因此,如果我的填充发生变化,我不必改变每个小部件。

    这就是我的 卡片 代码如下所示:

    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,
          ),
        );
      }
    }
    

    将其中的几个结果包装到所描述的剪切行为中。

    有没有办法告诉弗利特不要从包围盒中“漏出”任何东西?

    0 回复  |  直到 6 年前
        1
  •  6
  •   Kherel    6 年前

    您可以使用边距:

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

    也许您会对ViewPortControl参数感兴趣:

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

    它缩小了页面视图中页面的大小,所以最近的页面变得可见。

    enter image description here