赞
踩
1. 前言
无论是为了现在的技术尝鲜还是将来的潮流趋势,都9102年了,作为一个前端开发者,似乎没有理由不去尝试它。正是带着这样的心理,笔者也开始学习 今天分享的是Flutter中最常用到的一些基础组件,它们是构成UI界面的基础元素: 2. 基础组件2.1 Container(容器组件)
Container({ Key key, double width, double height, this.margin, this.padding, Color color, this.alignment, BoxConstraints constraints, Decoration decoration, this.foregroundDecoration, this.transform, this.child, }) 2.1.1 这些属性的含义和我们已经熟知的并没有区别。唯一需要注意的是,
2.1.2 该属性的含义是背景颜色,等同于web/rn中的backgroundColor。需要注意的是 在web/rn中我们会用 2.1.3 该属性是用来决定
2.1.4 在web/rn中我们通常会用 // 容器的大小将被限制在[100*100 ~ 200*200]内 BoxConstraints( minWidth: 100, maxWidth: 200, minHeight: 100, maxHeight: 200, ) 2.1.5 该属性非常强大,字面意思是装饰,因为通过它你可以设置 1) 边框 可以用 // 同时设置4条边框:1px粗细的黑色实线边框 BoxDecoration( border: Border.all(color: Colors.black, width: 1, style: BorderStyle.solid) ) // 设置单边框:上边框为1px粗细的黑色实线边框,右边框为1px粗细的红色实线边框 BoxDecoration( border: Border( top: BorderSide(color: Colors.black, width: 1, style: BorderStyle.solid), right: BorderSide(color: Colors.red, width: 1, style: BorderStyle.solid), ), ) 2) 阴影 阴影属性和web中的 BoxDecoration( boxShadow: [ BoxShadow( offset: Offset(0, 0), blurRadius: 6, spreadRadius: 10, color: Color.fromARGB(20, 0, 0, 0), ), ], ) 3) 渐变 如果你不想容器的背景颜色是单调的,可以尝试用 // 从左到右,红色到蓝色的线性渐变 BoxDecoration( gradient: LinearGradient( begin: Alignment.centerLeft, end: Alignment.centerRight, colors: [Colors.red, Colors.blue], ), ) // 从中心向四周扩散,红色到蓝色的径向渐变 BoxDecoration( gradient: RadialGradient( center: Alignment.center, colors: [Colors.red, Colors.blue], ), ) 4) 圆角 通常情况下,你可能会用到 // 同时设置4个角的圆角为5 BoxDecoration( borderRadius: BorderRadius.circular(5), ) // 设置单圆角:左上角的圆角为5,右上角的圆角为10 BoxDecoration( borderRadius: BorderRadius.only( topLeft: Radius.circular(5), topRight: Radius.circular(10), ), ) 2.1.6
2.1.7 小结
2.2 Row/Column(行/列组件)
Row({ Key key, MainAxisAlignment mainAxisAlignment = MainAxisAlignment.start, CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.center, MainAxisSize mainAxisSize = MainAxisSize.max, List<Widget> children = const <Widget>[], }) Column({ Key key, MainAxisAlignment mainAxisAlignment = MainAxisAlignment.start, CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.center, MainAxisSize mainAxisSize = MainAxisSize.max, List<Widget> children = const <Widget>[], }) 2.2.1 该属性的含义是主轴排列方式,根据上述构造函数可以知道 当然,你还可以使用其他的可选值:
2.2.2 该属性的含义是次轴排列方式,根据上述构造函数可以知道 这里有一点需要特别注意:由于 另外,crossAxisAlignment其他的可选值有:
2.2.3 字面意思上来说,该属性指的是在主轴上的尺寸。其实就是指在主轴方向上,是包裹其内容,还是撑满其父容器。它的可选值有 2.2.4 小结 由于 2.3 Stack/Positoned(绝对定位布局组件)绝对定位布局在web/rn开发中也是使用频率较高的一种布局方式, Container( height: 100, color: Colors.yellow, child: Stack( children: <Widget>[ Positioned( left: 10, top: 10, child: Container(width: 10, height: 10, color: Colors.red), ), Positioned( right: 10, top: 10, child: Container(width: 10, height: 10, color: Colors.red), ), Positioned( left: 10, bottom: 10, child: Container(width: 10, height: 10, color: Colors.red), ), Positioned( right: 10, bottom: 10, child: Container(width: 10, height: 10, color: Colors.red), ), ], ), ) 2.4 Text(文本组件)
const Text( this.data, { Key key, this.style, this.textAlign, this.softWrap, this.overflow, this.maxLines, })
Text( '这是测试文本', style: TextStyle( fontSize: 13, fontWeight: FontWeight.bold, color: Color(0xFF999999), ), ) 除了上述的应用场景外,有时我们还会遇到 Text.rich(TextSpan( children: [ TextSpan( '¥', style: TextStyle( fontSize: 12, color: Color(0xFFFF7528), ), ), TextSpan( '258', style: TextStyle( fontSize: 15, color: Color(0xFFFF7528), ), ), ] )) 2.5 Image(图片组件)
Image({ Key key, @required this.image, this.width, this.height, this.color, this.fit, this.repeat = ImageRepeat.noRepeat, })
另外, Image( image: NetworkImage('https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=1402367109,4157195964&fm=27&gp=0.jpg'), width: 100, height: 100, ) Image.network( 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=1402367109,4157195964&fm=27&gp=0.jpg', width: 100, height: 100, ) 2.6 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。