Как сделать хороший эффект затенения? - PullRequest
0 голосов
/ 25 февраля 2020

Я хотел бы сделать хорошие эффекты тени, показанные ниже,

enter image description here enter image description here

Все примеры найдены на inte rnet не мог даже приблизиться к вышеупомянутым проектам.

После долгих проб и ошибок я мог сделать следующее. Все еще не мог сделать внутреннюю тень. Было бы замечательно, если бы кто-нибудь помог мне понять, как расшифровать этот дизайн.

enter image description here

Код, использованный для создания кнопки выше,

Widget buildBackButton() {
    double size = 47;
    return Stack(
      children: <Widget>[
        Container(
          width: size,
          height: size,
          decoration: BoxDecoration(
              color: Colors.white,
              shape: BoxShape.circle,
              boxShadow: [
                BoxShadow(
                  color: Colors.black26,
                  offset: Offset(20, 20),
                  blurRadius: 40,
                ),
                BoxShadow(
                  color: Colors.white,
                  offset: Offset(-20, -20),
                  blurRadius: 25,
                )
              ]),
          child: Material(
            color: Color(0xffe0eafb),
            borderRadius: BorderRadius.circular(size),
            elevation: 10,
            child: Padding(
              padding: const EdgeInsets.all(3.0),
              child: ClipOval(
                clipper: MClipper(),
              ),
            ),
          ),
        ),
        Container(
            width: 45.0,
            height: 45.0,
            padding: EdgeInsets.only(left: 2, top: 2),
            child: new RawMaterialButton(
              shape: new CircleBorder(),
              fillColor: Color(0xffe0eafb),
              elevation: 10.0,
              child: Icon(
                Icons.arrow_back,
                color: Colors.black,
              ),
              onPressed: () {},
            )),
      ],
    );
  }

class MClipper extends CustomClipper<Rect> {
  @override
  Rect getClip(Size size) {
    return Rect.fromCircle(
        center: Offset(size.width / 2, size.height / 2),
        radius: min(size.width, size.height) / 2);
  }

  @override
  bool shouldReclip(CustomClipper<Rect> oldClipper) {
    return true;
  }
}

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 25 февраля 2020

Это может помочь вам!

      @override
      Widget build(BuildContext context) {
        return Scaffold(
            body: Container(
              height:double.infinity,
                color: Colors.white,
                child: Row(
                  mainAxisAlignment:MainAxisAlignment.spaceAround,
                  children: [
                  Card(
                      shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(80),
                      ),
                    elevation:25,
                    color:Colors.blue,
                      child: Icon(Icons.pause, color: Colors.white, size: 150)),
                    Card(
                      shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(80),
                      ),
                    elevation:25,
                    color:Colors.white,
                      child: Icon(Icons.forward, color: Colors.black, size: 150))
                ])));
      }

Screenshot

1 голос
/ 25 февраля 2020

Blue Raised Button

Вот код:

  Widget build(BuildContext context) {
    return Material(
      elevation: 2,
      type: MaterialType.button,
      color: Colors.transparent,
      borderRadius: BorderRadius.circular(1000),
      child: Container(
        decoration: BoxDecoration(
          border: Border.all(color: Color(0xff6C96F9), width: 2.0),
          borderRadius: BorderRadius.circular(1000),
          gradient: RadialGradient(
            center: Alignment(0.55, 0.55),
            focalRadius: 64,
            colors: [
              Color(0xff789DF9),
              Color(0xff477FF8),
            ],
          ),
        ),
        child: GestureDetector(
          onTap: () {},
          child: Padding(
            padding: const EdgeInsets.all(24.0),
            child: Icon(
              Icons.pause,
              color: Colors.white,
            ),
          ),
        ),
      ),
    );
  }
1 голос
/ 25 февраля 2020
  1. Оберните этот виджет в Контейнер и предоставьте некоторые свойства {spreadRadius, blurRadius} для Контейнера, например
Container(  
    child: your_widget,  
    decoration : BoxDecoration(  
        shadow : [
            BoxShadow(  
            color : Colors.grey,   
            spreadRadius : 5,  
            blurRadius : 2  
        )]  
    ),  
);
следовать ссылка

Happy Coding:)

1 голос
/ 25 февраля 2020

Вы можете попробовать Container BoxShadow вот так

return Container(
        height: 80,
        width: 80,
        margin: new EdgeInsets.symmetric(vertical: 10.0),
        decoration: BoxDecoration(shape: BoxShape.circle, boxShadow: [
          BoxShadow(
            color: DesignTinTinAppTheme.Bright_gray,
            blurRadius: 3.0,
          ),
        ]),
        alignment: FractionalOffset.centerLeft,
        child: new Align(
          alignment: Alignment.center,
          child: new Image(
            image: new AssetImage(
              "assets/images/gear.png",
            ),
            height: 30.0,
            width: 30.0,
            color: Colors.grey,
          ),
        ));
...