Flutter - view - Container容器组件

2018-12-05  本文已影响0人  sexyhair

Container

属性

alignment:child的居中方式

示例代码:

alignment: Alignment.topLeft

其值(源码粘贴):

/// The top left corner.
static const Alignment topLeft = Alignment(-1.0, -1.0);

/// The center point along the top edge.
static const Alignment topCenter = Alignment(0.0, -1.0);

/// The top right corner.
static const Alignment topRight = Alignment(1.0, -1.0);

/// The center point along the left edge.
static const Alignment centerLeft = Alignment(-1.0, 0.0);

/// The center point, both horizontally and vertically.
static const Alignment center = Alignment(0.0, 0.0);

/// The center point along the right edge.
static const Alignment centerRight = Alignment(1.0, 0.0);

/// The bottom left corner.
static const Alignment bottomLeft = Alignment(-1.0, 1.0);

/// The center point along the bottom edge.
static const Alignment bottomCenter = Alignment(0.0, 1.0);

/// The bottom right corner.
static const Alignment bottomRight = Alignment(1.0, 1.0);

margin / padding:间距

示例代码:

 margin: const EdgeInsets.fromLTRB(10.0, 50.0, 100.0, 150.0),
 padding: const EdgeInsets.symmetric(vertical:10.0,horizontal: 30.0),

其值:

const EdgeInsets.all(20.0):
      表示left、top、right、bottom都是一样的
const EdgeInsets.fromLTRB(10.0, 50.0, 100.0, 150.0)
      分别设置left、top、right、bottom
const EdgeInsets.symmetric(vertical:10.0,horizontal: 30.0):
      查看源码可知left、right的值为horizontal ,top、bottom为vertical
const EdgeInsets.only(left: 50.0)
      仅仅设置left、top、right、bottom其中的一个、2个、3个、4个

decoration container的装饰类
主要是设置container的背景、边框、阴影、圆角、形状(类似shape)

不可以与Color同时设置,会异常
异常提示:Cannot provide both a color and a decoration

border:边框、圆角

示例代码:

border: Border.all(width: 2.0, color: Colors.red),
shape: BoxShape.rectangle,
borderRadius:
    const BorderRadius.all(const Radius.circular(50.0))

注意:

若是想达到半圆的效果,圆角的角度要大于高度的1/2
当shape: BoxShape.circle时不能设置borderRadius ,会异常
    异常信息:'shape != BoxShape.circle ||borderRadius == null': is not true.

border:阴影
默认情况下阴影为纯黑色,零[偏移]
示例代码:

boxShadow: <BoxShadow>[
  new BoxShadow(
    offset: Offset(-10.0, 10.0),//偏移量,
  )
],
效果图:

注意:

offset:第一个参数是水平方向,第二个是垂直方向上的,值的正负决定了阴影的方向

设置阴影大小
示例代码:

boxShadow: <BoxShadow>[
  new BoxShadow(
    color: Colors.black87,
    spreadRadius: 1.0,
    offset: Offset(-10.0, 10.0),//偏移量,第一个参数是水平方向,第二个是垂直方向上的
  )
],
效果图:

设置阴影+模糊

示例代码:

boxShadow: <BoxShadow>[
  new BoxShadow(
    color: Colors.black87,
    blurRadius: 1.0,
    offset: Offset(-10.0, 10.0),
  )
],
效果图:

Gradient:渐变背景

1 - LinearGradient

除了设置渐变颜色外还可以设置渐变开始、结束方向,查看源码可知其默认值是:

this.begin = Alignment.centerLeft,
this.end = Alignment.centerRight,

示例代码:

decoration: new BoxDecoration(
  gradient: const LinearGradient(colors: [
    Colors.yellow,
    Colors.green,
    Colors.blue,
    Colors.black26
], begin: Alignment.centerRight, end: Alignment.center)),
效果图:
2 - RadialGradient

可实现圆的渐变,使用和LinearGradient类似

示例代码:

decoration: new BoxDecoration(
  gradient: new RadialGradient(colors: [
    Colors.yellow,
    Colors.green,
    Colors.blue,
    Colors.red
],radius: 0.1)),
效果图:

示例代码:

decoration: new BoxDecoration(
  gradient: new RadialGradient(colors: [
    Colors.yellow,
    Colors.green,
    Colors.blue,
    Colors.red
],radius: 0.1,tileMode:TileMode.repeated)),
效果图:
3 - SweepGradient

可实现带角度的渐变

示例:

decoration: new BoxDecoration(
  gradient: new SweepGradient(colors: [
    Colors.yellow,
    Colors.green,
    Colors.blue,
    Colors.red
  ]))

效果图:


注意:

通过上面对比发现,剩余没有指定渐变的背景是就近颜色的色值

Container整体使用

示例代码:

child: Container(
  child: new Text(
    "HelloWorld",
    style: TextStyle(
        decoration: TextDecoration.underline,
        color: Colors.white,
        fontSize: 30.0,
        fontWeight: FontWeight.bold,
        fontStyle: FontStyle.italic),
  ),
  alignment: Alignment.center,
  margin: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 30.0),
  padding: const EdgeInsets.all(10.0),
  height: 70.0,
  decoration: new BoxDecoration(
      gradient: const LinearGradient(colors: [
        Color.fromARGB(255, 255, 81, 123),
        Color.fromARGB(255, 255, 84, 58)
      ]),
      border: Border.all(width: 2.0, color: Colors.red),
      shape: BoxShape.rectangle,//不加这个也可以实现
      borderRadius:
          const BorderRadius.all(const Radius.circular(50.0))),
),
demo:实现渐变带框圆角按钮,效果图:
上一篇下一篇

猜你喜欢

热点阅读