美文网首页
Flutter 之 装饰容器DecoratedBox (四十四)

Flutter 之 装饰容器DecoratedBox (四十四)

作者: maskerII | 来源:发表于2022-05-08 21:39 被阅读0次

1. DecoratedBox

DecoratedBox可以在其子组件绘制前(或后)绘制一些装饰(Decoration),如背景、边框、渐变等。

DecoratedBox定义如下:

const DecoratedBox({
  Decoration decoration,
  DecorationPosition position = DecorationPosition.background,
  Widget? child
})
  • decoration:代表将要绘制的装饰,它的类型为DecorationDecoration是一个抽象类,它定义了一个接口 createBoxPainter(),子类的主要职责是需要通过实现它来创建一个画笔,该画笔用于绘制装饰。
  • position:此属性决定在哪里绘制Decoration,它接收DecorationPosition的枚举类型,该枚举类有两个值:
    • background:在子组件之后绘制,即背景装饰。
    • foreground:在子组件之上绘制,即前景。

2. BoxDecoration

我们通常会直接使用BoxDecoration类,它是一个Decoration的子类,实现了常用的装饰元素的绘制。

BoxDecoration({
  Color color, //颜色
  DecorationImage image,//图片
  BoxBorder border, //边框
  BorderRadiusGeometry borderRadius, //圆角
  List<BoxShadow> boxShadow, //阴影,可以指定多个
  Gradient gradient, //渐变
  BlendMode backgroundBlendMode, //背景混合模式
  BoxShape shape = BoxShape.rectangle, //形状
})

2.1 带阴影的背景色渐变的按钮

class MSDecoratedBoxDemo1 extends StatelessWidget {
  const MSDecoratedBoxDemo1({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: DecoratedBox(
          decoration: BoxDecoration(
            gradient: LinearGradient(
                colors: [Colors.red, Colors.orange.shade700]), //背景渐变
            borderRadius: BorderRadius.circular(3), //3像素圆角
            boxShadow: [
              BoxShadow(
                color: Colors.black54,
                blurRadius: 4.0,
                offset: Offset(2.0, 2.0),
              ),
            ],
          ),
          child: GestureDetector(
            child: Padding(
              padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
              child: Text("Login",
                  style: TextStyle(fontSize: 20, fontWeight: FontWeight.w400)),
            ),
            onTap: () {
              print("Login Click");
            },
          ),
        ),
      ),
    );
  }
}

image.png

2.2 圆形头像 圆角头像

圆形头像


class MSDecoratedBoxDemo2 extends StatelessWidget {
  const MSDecoratedBoxDemo2({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Container(
          width: 200,
          height: 200,
          child: DecoratedBox(
            decoration: BoxDecoration(
              image:
                  DecorationImage(image: AssetImage("assets/images/tx2.jpeg")),
              shape: BoxShape.circle,
            ),
          ),
        ),
      ),
    );
  }
}

image.png

圆角头像


class MSDecoratedBoxDemo3 extends StatelessWidget {
  const MSDecoratedBoxDemo3({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Container(
          width: 200,
          height: 200,
          child: DecoratedBox(
            decoration: BoxDecoration(
              image: DecorationImage(
                image: AssetImage("assets/images/tx2.jpeg"),
              ),
              borderRadius: BorderRadius.circular(20.0),
              shape: BoxShape.rectangle,
            ),
          ),
        ),
      ),
    );
  }
}

image.png

https://book.flutterchina.club/chapter5/decoratedbox.html

相关文章

网友评论

      本文标题:Flutter 之 装饰容器DecoratedBox (四十四)

      本文链接:https://www.haomeiwen.com/subject/sotcurtx.html