【问题标题】:Transparent card but with shadow effect from elevation透明卡片,但具有高程阴影效果
【发布时间】:2021-05-15 05:42:10
【问题描述】:

我无法制作透明白色(不透明度 0.4)的卡片。但是,由于高程效果的阴影。

如果我移除高程,则没有阴影效果并且卡片看起来是透明的。但是,如果我添加一些高度,透明效果就毁了。这是我尝试过的:

  Widget cardMenu(String title) {
return Container(
  padding: EdgeInsets.symmetric(horizontal: UIComponent.componentPadding),
  child: Stack(
    alignment: Alignment.topCenter,
    children: [
      Positioned(
        top: -100,
        child: Container(
          child: Container(
            height: 200,
            width: 200,
            decoration: BoxDecoration(
              color: Colors.white,
              shape: BoxShape.circle,
            ),
            child: Center(
              child: Text(
                title,
                style: TextStyle(color: Colors.transparent),
              ),
            ),
          ),
        )
      ),
      Align(
        alignment: Alignment.bottomCenter,
        child: Card(
          elevation: 0,
          color: Colors.white.withOpacity(0.4),
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.all(
              Radius.circular(UIComponent.cardButtonRadius),
            ),
          ),
          child: Container(
            height: 350,
            width: 180,
            child: Column(
              mainAxisSize: MainAxisSize.min,
              mainAxisAlignment: MainAxisAlignment.end,
              children: [
                Container(
                  padding: EdgeInsets.all(UIComponent.widgetPadding),
                  child: Text(
                    title,
                    style: TextStyle(
                      fontWeight: FontWeight.bold,
                      fontSize: UIComponent.h1,
                      color: UIComponent.neutralDark,
                    ),
                  ),
                )
              ],
            ),
          ),
        ),
      )
    ],
  ),
);

}

我的代码输出:

我的期望:

【问题讨论】:

    标签: flutter dart material-design opacity elevation


    【解决方案1】:

    Christophorus Anindityo N

    为容器的 BoxShadow 属性创建一个类。

    class CustomBoxShadow extends BoxShadow {
      final BlurStyle blurStyle;
    
      const CustomBoxShadow({
        Color color = const Color(0xFF000000),
        Offset offset = Offset.zero,
        double blurRadius = 0.0,
        this.blurStyle = BlurStyle.normal,
      }) : super(color: color, offset: offset, blurRadius: blurRadius);
    
      @override
      Paint toPaint() {
        final Paint result = Paint()
          ..color = color
          ..maskFilter = MaskFilter.blur(this.blurStyle, blurSigma);
        assert(() {
          if (debugDisableShadows)
            result.maskFilter = null;
          return true;
        }());
        return result;
      }
    }
    

    并在容器中使用这个类

    Container(
     child: Center(
      child: Container(
        height: 200.0,
        width: 300.0
        decoration: BoxDecoration(
         boxShadow: [
          CustomBoxShadow(
           color: Colors.black,
           offset: Offset(5.0, 5.0),
           blurRadius: 5.0,
           blurStyle: BlurStyle.outer
          )
         ],
        ),
       child: Text("Transparent Card with Shadow", style:TextStyle(fontSize:15))),
      )
     )
    

    现在你可以编写代码了 :)

    【讨论】:

    • 嗨!感谢您回答我的问题。我在上面尝试了你的代码,但它没有像我问的卡那样圆润的边框。你能把它做成圆形边框的形状吗?
    • 在装饰属性中添加“borderRadius: BorderRadius.circular(10)”就可以了。
    猜你喜欢
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多