一、装饰容器
DecoratedBox
DecoratedBox 可以在其子组件绘制前(或后)绘制一些装饰(Decoration),如背景、边框、渐变等。DecoratedBox 定义如下:
const DecoratedBox({Decoration decoration,DecorationPosition position = DecorationPosition.background,Widget child})
- decoration:代表将要绘制的装饰,它的类型为 Decoration。Decoration 是一个抽象类,它定义了一个接口 createBoxPainter(),子类的主要职责是需要通过实现它来创建一个画笔,该画笔用于绘制装饰。
- position:此属性决定在哪里绘制 Decoration,它接收 DecorationPosition 的枚举类型,该枚举类有两个值:
- background:在子组件之后绘制,即背景装饰。
- foreground:在子组件之上绘制,即前景。
BoxDecoration
我们通常会直接使用 BoxDecoration 类,它是一个 Decoration 的子类,实现了常用的装饰元素的绘制。
BoxDecoration({Color color, // 颜色DecorationImage image, // 图片BoxBorder border, // 边框BorderRadiusGeometry borderRadius, // 圆角List<BoxShadow> boxShadow, // 阴影,可以指定多个Gradient gradient, // 渐变BlendMode backgroundBlendMode, // 背景混合模式BoxShape shape = BoxShape.rectangle, // 形状})
示例:
DecoratedBox(decoration: BoxDecoration(gradient: LinearGradient(colors:[Colors.red,Colors.orange[700]]), // 背景渐变borderRadius: BorderRadius.circular(3.0), // 3像素圆角boxShadow: [ // 阴影BoxShadow(color: Colors.black54,offset: Offset(2.0,2.0),blurRadius: 4.0)]),child: Padding(padding: EdgeInsets.symmetric(horizontal: 80.0, vertical: 18.0),child: Text("Login", style: TextStyle(color: Colors.white),),))
二、形状
BoxShape 用于定义盒子形状
BoxShape.rectangle矩形BoxShape.circle圆形
三、颜色
示例:
Colors.transparent // 透明Colors.red // Colors.颜色名称, 同 Colors.red[500]Colors.red[100] // 色彩深度, 取值 100-900, 整数100的倍数Colors.grey.withOpacity(0.1) // 指定透明度Color(0xccff0000) // Color(0xAARRGGBB)Color.fromRGBO(255,0,0,.1) // Color.fromRGBO(R, G, B, O)Color.fromARGB(.1,255,0,0) // Color.fromARGB(O, R, G, B)
四、透明度
Opacity 组件可以让子元素都保持同样的透明度
示例:
Opacity(opacity: _visible ? 1.0 : 0.0, // 1 显示 0 隐藏child: const Text('Now you see me, now you don\'t!'),)
五、边框
Border 定义了边框样式, 可以是多边也可以是单边, BorderSide 定义单边颜色, 参数与 Border.all 一致
示例:
// 所有方向: Border.all(color, width, style)Border.all(color: Color(0xffff0000), width: 1.0, style: BorderStyle.solid)// 单方向Border(top: BorderSide(color: Color(0xffff0000),style: BorderStyle.solid,width: 1))
六、阴影
BoxShadow 的定义了阴影样式
示例:
BoxShadow({Color color = const Color(0xFF000000),Offset offset = Offset.zero,double blurRadius = 0.0,this.spreadRadius = 0.0,})
示例:
BoxShadow(color: Colors.red,offset: Offset(2.0,2.0),blurRadius: 8.0,spreadRadius: 4.0)
七、圆角
BorderRadius 定义了圆角样式, 常用方法有:
BorderRadius.circular(radius)指定四个方向角的圆角值BorderRadius.all(Radius.circular(10))指定四个方向角的圆角值BorderRadius.horizontal({Radius right, Radius left})指定水平方向的圆角值BorderRadius.vertical({Radius top, Radius bottom})指定垂直方向的圆角值BorderRadius.only({Radius right, Radius left, Radius top, Radius bottom})指定四个方向的圆角值
示例:
BorderRadius.circular(10)BorderRadius.all(Radius.circular(10))BorderRadius.horizontal(right: Radius.circular(10), left: Radius.circular(30))BorderRadius.vertical(top: Radius.circular(10), bottom: Radius.circular(30))BorderRadius.only(topLeft: Radius.circular(10),topRight: Radius.circular(20),bottomLeft: Radius.circular(30),bottomRight: Radius.circular(40))
八、渐变
线性渐变
LinearGradient 的定义:
LinearGradient({this.begin = Alignment.centerLeft,this.end = Alignment.centerRight,@required List<Color> colors,List<double> stops,this.tileMode = TileMode.clamp,})
示例:
LinearGradient(colors: [Colors.red, Colors.lime],begin: Alignment(-3, -3),end: Alignment(2,2),stops: [0.3, 1])
其中 stops 的长度需要与 colors 的长度匹配, 否则报错
径向渐变
RadialGradient 的定义:
RadialGradient({this.center = Alignment.center,this.radius = 0.5,@required List<Color> colors,List<double> stops,this.tileMode = TileMode.clamp,this.focal,this.focalRadius = 0.0,})
示例:
RadialGradient(colors: [Colors.red, Colors.lime, Colors.green, Colors.amber],stops: [0.1, 0.5, 1, 2],radius: 2,center: Alignment(0, 0),)
梯度渐变
SweepGradient 的定义:
SweepGradient({this.center = Alignment.center,this.startAngle = 0.0,this.endAngle = math.pi * 2,@required List<Color> colors,List<double> stops,this.tileMode = TileMode.clamp,})
示例:
SweepGradient(colors: [Colors.red, Colors.green, Colors.blue],stops: [.1, .4, 1],startAngle: 0,endAngle: 2 * pi)
