美文网首页
Flutter学习--Container组件

Flutter学习--Container组件

作者: 小迷糊_dcee | 来源:发表于2020-11-18 00:46 被阅读0次

    一、介绍

    Container 组件是一个方便绘制、定位和调整子组件大小的组件(可以装别的组件的盒子)

    二、创建container组件源码

    Container({
        Key key,
        this.alignment,
        this.padding,
        this.color,
        this.decoration,
        this.foregroundDecoration,
        double width,
        double height,
        BoxConstraints constraints,
        this.margin,
        this.transform,
        this.child,
        this.clipBehavior = Clip.none,
      }) : assert(margin == null || margin.isNonNegative),
           assert(padding == null || padding.isNonNegative),
           assert(decoration == null || decoration.debugAssertIsValid()),
           assert(constraints == null || constraints.debugAssertIsValid()),
           assert(clipBehavior != null),
           assert(decoration != null || clipBehavior == Clip.none),
           assert(color == null || decoration == null,
             'Cannot provide both a color and a decoration\n'
             'To provide both, use "decoration: BoxDecoration(color: color)".'
           ),
           constraints =
            (width != null || height != null)
              ? constraints?.tighten(width: width, height: height)
                ?? BoxConstraints.tightFor(width: width, height: height)
              : constraints,
           super(key: key);
    

    三、属性介绍

    \color{red}{alignment:Alignment}对齐方式,使用如下

    属性 说明
    Alignment.topLeft 垂直靠顶部水平靠左对齐
    Alignment.topCenter 垂直靠顶部水平居中对齐
    Alignment.topRight 垂直靠顶部水平靠右对齐
    Alignment.centerLeft 垂直居中水平靠左对齐
    Alignment.center 垂直和水平居中都对齐
    Alignment.centerRight 垂直居中水平靠右对齐
    Alignment.bottomLeft 垂直靠底部水平靠左对齐
    Alignment.bottomCenter 垂直靠底部水平居中对齐
    Alignment.bottomRight 垂直靠底部水平靠右对齐
    Alignment(double x, double y) 根据具体的x,y轴偏移量定位

    \color{red}{padding:EdgeInsets}内边距,使用如下

    属性 说明
    EdgeInsets.all(double value) 上下左右统一设置内边距
    EdgeInsets.fromLTRB(double left,double top,double double right,double bottom) 分别设置左上右下的内边距

    \color{red}{color:Color}背景色,不能与 decoration 属性同时设置
    \color{red}{decoration:Decoration}装饰,也就是设置背景色、边框、圆角等,不能和color同时使用,Decoration是抽象类,一般使用BoxDecoration的实现类(FlutterLogoDecoration、ShapeDecoration、UnderlineTabIndicator也是Decoration的实现类)

    BoxDecoration的源码

    const BoxDecoration({
        this.color,//背景填充颜色
        this.image,//使用图片作为装饰
        this.border,//可以设置边框颜色、边框宽度、边框样式
        this.borderRadius,//边框圆角
        this.boxShadow,//阴影效果
        this.gradient,//设置成渐变效果的背景,会覆盖 color
        this.backgroundBlendMode,//混合模式(暂不了解)
        this.shape = BoxShape.rectangle,
      }) : assert(shape != null),
           assert(
             backgroundBlendMode == null || color != null || gradient != null,
             "backgroundBlendMode applies to BoxDecoration's background color or "
             'gradient, but no color or gradient was provided.'
           );
    

    BoxDecoration属性

    属性 说明
    Color color 背景填充颜色
    DecorationImage image 使用图片作为装饰
    Border border 可以设置边框颜色、边框宽度、边框样式
    BorderRadius borderRadius 边框圆角
    BoxShadow boxShadow 阴影效果
    LinearGradient gradient 设置成渐变效果的背景,会覆盖 color
    BlendMode backgroundBlendMode 混合模式

    \color{red}{foregroundDecoration:Decoration}装饰,绘制在child之上,使用方法同decoration
    \color{red}{width:double}
    \color{red}{height:double}
    \color{red}{constraints}约束条件(暂不了解如何使用)
    \color{red}{margin:EdgeInsets}外边距,使用方法同padding
    \color{red}{transform:Matrix4}形状变化,简单使用如下

    属性 说明
    Matrix4.translationValues(double x,double y,double z) 根据x,y,z的值进行平移
    Matrix4.diagonal3Values(double x,double y,double z) 根据x,y,z的值进行缩放,正值放大,负值缩小
    Matrix4.rotationZ(double z) 根据z轴进行旋转
    Matrix4.rotationY(double y) 根据y轴进行旋转
    Matrix4.rotationX(double x) 根据x轴进行旋转
    Matrix4.skew(double x,double y) 根据x,y轴的值进行扭曲
    Matrix4.skewX(double x) 根据x轴的值进行扭曲
    Matrix4.skewY(double y)根据y轴的值进行扭曲

    \color{red}{child:Widget}子组件

    demo

    class ContainerTest extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Center(
            child: Container(
          //对齐方式
          alignment: Alignment.center,
          //内边距
          padding: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 20.0),
          //背景色
    //          color: Colors.yellow,
          //装饰
          decoration: BoxDecoration(
            //背景色
            color: Colors.red,
            //图片地址
    //        image: DecorationImage(image: NetworkImage("url")),
            //边框
            border: Border.all(color: Color(0xff000000), width: 5.0),
            //圆角
            borderRadius: BorderRadius.only(
                topLeft: Radius.circular(10.0),
                topRight: Radius.circular(20.0),
                bottomLeft: Radius.circular(30.0),
                bottomRight: Radius.circular(40.0)),
            //阴影
            boxShadow: [BoxShadow(color: Color(0xff000000), blurRadius: 5.0)],
            //渐变色
            gradient: LinearGradient(
                colors: [Colors.amberAccent, Colors.blue, Colors.deepPurple]),
    //          backgroundBlendMode: BlendMode.color //混合模式
          ),
          //装饰,child之上
    //      foregroundDecoration: BoxDecoration(),
          child: Text(
            "我是一个文本",
            style: TextStyle(color: Colors.red),
          ),
          //宽
          width: 300.0,
          //高
          height: 300.0,
          //外边距
          margin: EdgeInsets.all(10.0),
          //根据x,y,z的值进行平移
    //          transform:Matrix4.translationValues(20.0, 20.0, 20.0),
          //根据x,y,z的值进行缩放,正值放大,负值缩小
    //            transform: Matrix4.diagonal3Values(-2, -2, 1),
          //根据z轴进行旋转
    //            transform: Matrix4.rotationZ(1.3),
          //根据y轴进行旋转
    //        transform: Matrix4.rotationY(1.3),
          //根据x轴进行旋转
    //      transform: Matrix4.rotationX(1.5),
          //扭曲,根据x,y轴的值进行扭曲
    //        transform: Matrix4.skew(1.5, 0.0),
          //扭曲,根据x轴的值进行扭曲
    //        transform: Matrix4.skewX(1.3),
          //扭曲,根据y轴的值进行扭曲
          transform: Matrix4.skewY(-0.5),
        ));
      }
    }
    
    企业微信截图_16056317458073.png

    (整理出来,方便个人查找和学习)

    相关文章

      网友评论

          本文标题:Flutter学习--Container组件

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