Flutter编程之Container用法详解

Container是一个Widget容器,容器里面可以放置任意的Widget子组件,可以是一个文本组件Text,也可以是一个图片组件Image,甚至是一个和自己一样的ContainerContainer的子组件用child属性来指定。

属性

Container提供了很多属性,大体上包含大小位置装饰

属性解释类型
alignment对齐方式AlignmentGeometry
padding内边距EdgeInsetsGeometry
color背景色Color
decoration背景装饰器Decoration
foregroundDecoration前景装饰器Decoration
width宽度double
height高度double
constraints约束BoxConstraints
margin外边距EdgeInsetsGeometry
child子WidgetWidget
transform转换Matrix4
width,height

指定Container的宽高,不指定的话默认充满父Widgetdouble类型。下图是一个不指定宽高的Container

body: Center(
  child: Container(
    color: Colors.blue,
  ),
),

效果图:
在这里插入图片描述

可以看到,Container完全占满了整个body区域。下面来看看指定Container的宽高属性是什么效果

body: Center(
  child: Container(
    width: 300,
    height: 300,
    color: Colors.blue,
  ),
),

效果图:

在这里插入图片描述

指定了宽高属性之后,Container就会按照指定的宽高来绘制了。

color

在上面宽高属性例子中就使用到了color属性,是一个Color类型的值,声明Color的方式通常也有几种方式:

  • Flutter预定义的一些常用颜色在Colors类中,如Colors.blue

  • Color.fromARGB(a, r, g, b)

    • a:alpha,透明度,0~255的整型值,0代表完全透明,255代表完全不透明,128代表半透明
    • r:red,红色通道,0~255的整型值,255代表红色
    • g:green,绿色通道,0~255的整型值,255代表绿色
    • b:blue,蓝色通道,0~255的整型值,255代表蓝色

    Color.fromARGB(255, 255, 0, 0)表示红色。

  • Color.fromRGBO(r, g, b, o)

    • r:red,红色通道,0~255的整型值,255代表红色
    • g:green,绿色通道,0~255的整型值,255代表绿色
    • b:blue,蓝色通道,0~255的整型值,255代表蓝色
    • o:opacity,不透明度,0.0~1.0的浮点数,1.0代表完全不透明

    Color.fromRGBO(255, 0, 0, 1.0)表示红色。

  • Color传入十六进制颜色值,传入的十六进制颜色值也是按照ARGB的格式。Color(0xFFFF0000)表示红色

    • 0x:16进制前缀标识
    • FF:透明度,FF为255,表示完全不透明
    • FF:红色通道,FF为255,表示红色
    • 0000:绿色通道+蓝色通道,与红色通道的FF叠加表示红色
alignment

Widget在父Widget中的对齐方式。

body: Center(
  child: Container(
    width: 200,
    height: 200,
    color: Colors.blue,
    alignment: XXX, // 指定下方的Container的对齐方式
    child: Container(
      width: 50,
      height: 50,
      color: Colors.red,
    ),
  ),
)

Flutter已经内置了一些常用的对齐方式:

  • topLeft

  • topCenter

  • topRight

  • centerLeft

  • center

  • centerRight

  • bottomLeft

  • bottomCenter

  • bottomRight

topLefttopCentertopRight
在这里插入图片描述在这里插入图片描述在这里插入图片描述
centerLeftcentercenterRight
在这里插入图片描述在这里插入图片描述在这里插入图片描述
bottomLeftbottomCenterbottomRight
在这里插入图片描述在这里插入图片描述在这里插入图片描述

从上表中的效果图中可以看出,Flutter预置的对齐方式上下方向分为 ,左右方向分为 ,将一个Widget按照了6条线进行分割。

在这里插入图片描述

那么如果想到达到如下效果应该怎么做呢?

在这里插入图片描述

橙色圆形在点(0,0)和点(0,1)的中间,和上图表格中的效果图对比发现,Flutter内置的9个对齐方式已经满足不了需求了,但是Flutter为我们提供了更自由定制的一种方式,通过Alignment类构造函数的方式传入x坐标和y坐标的距离分数(distance fraction)距离分数在范围0 ~ 1之间。

body: Center(
  child: Container(
    width: 200,
    height: 200,
    color: Colors.blue,
    alignment: Alignment(0, 0.5), // 指定下方的Container的对齐方式
    child: Container(
      width: 50,
      height: 50,
      color: Colors.red,
    ),
  ),
)

在这里插入图片描述

其实查看源码后可以发现,Flutter预置的9种对齐方式也是通过这种构造函数的方式来定义的。

在这里插入图片描述

padding

设置Widget与其子Widget内边界的距离。

body: Container(
  width: 200,
  height: 200,
  color: Colors.blue,
  padding: EdgeInsets.all(30),
  alignment: Alignment.topLeft,
  child: Container(
    width: 50,
    height: 50,
    color: Colors.red,
  ),
),

在这里插入图片描述

红色矩形上下左右和蓝色矩形的上下左右距离为30,因为红色矩形比较小,因此看不出右边和下边的内边距。把内层Container的宽高去掉,再看看效果:

body: Container(
  width: 200,
  height: 200,
  color: Colors.blue,
  padding: EdgeInsets.all(30),
  alignment: Alignment.topLeft,
  child: Container(
    color: Colors.red,
  ),
),

在这里插入图片描述

可以看到,红色矩形和蓝色矩形边界距离都是30。

  • EdgeInsets.zero :与上下左右没有边距;

  • EdgeInsets.all(double value):统一设置上下左右边距;

  • EdgeInsets.only({double left, double top, double right, double bottom}):分开设置上下左右边距,可单独设置,如果全部设置成一样的值,则等价于EdgeInsets.all(double value)

  • EdgeInsets.fromLTRB(double left, double top, double right, double bottom):必须传入4个参数,依次表示 ,与EdgeInsets.only不同的是,EdgeInsets.only是可选命名函数,可单独设置,而EdgeInsets.fromLTRB不是可选命名函数,必须要一一对应传入每个参数;

  • EdgeInsets.symmetric({double vertical, double horizontal}):设置水平内边距和垂直内边距,水平内边距则是设置左内边距和右内边距,垂直内边距则是设置上内边距和下内边距。其本质上和上面几种设置方式没有什么区别,都是通过设置其left top right bottom这几个属性来达到目的。

margin

设置Widget其父Widget外边界的距离。

body: Container(
  width: 200,
  height: 200,
  color: Colors.blue,
  margin: EdgeInsets.all(30),
  alignment: Alignment.topLeft,
  child: Container(
    width: 50,
    height: 50,
    color: Colors.red,
  ),
),

在这里插入图片描述

通过与padding中的第一张图中的效果对比可以发现,设置margin后,蓝色矩形不再是和红色矩形有边距了,而是和整个body区域的边距,因为该边距在该蓝色Widget的外侧,所以叫外边距。从图中同样看不出上下左右的边距效果,我们把外层Container的宽高去掉,再看看效果:

body: Container(
  color: Colors.blue,
  margin: EdgeInsets.all(30),
  alignment: Alignment.topLeft,
  child: Container(
    width: 50,
    height: 50,
    color: Colors.red,
  ),
),

在这里插入图片描述

可以看到,蓝色矩形的外边界距离都是30。

设置外边距的方式和内边距的方式完全一样。

  • EdgeInsets.zero :与上下左右没有边距;

  • EdgeInsets.all(double value):统一设置上下左右边距;

  • EdgeInsets.only({double left, double top, double right, double bottom}):分开设置上下左右边距,可单独设置,如果全部设置成一样的值,则等价于EdgeInsets.all(double value)

  • EdgeInsets.fromLTRB(double left, double top, double right, double bottom):必须传入4个参数,依次表示 ,与EdgeInsets.only不同的是,EdgeInsets.only是可选命名函数,可单独设置,而EdgeInsets.fromLTRB不是可选命名函数,必须要一一对应传入每个参数;

  • EdgeInsets.symmetric({double vertical, double horizontal}):设置水平内边距和垂直内边距,水平内边距则是设置左内边距和右内边距,垂直内边距则是设置上内边距和下内边距。其本质上和上面几种设置方式没有什么区别,都是通过设置其left top right bottom这几个属性来达到目的。

child

设置一个Widget包含的另一个Widget,比如上面例子中蓝色矩形Widget包含的红色矩形Widget,可以是任意Widget

decoration、foregroundDecoration

见 Flutter编程之BoxDecoration用法详解

transform

见 Flutter编程 —— transform

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Flutter中的DataTable使用详解,我可以为您提供以下内容: 1. DataTable简介 DataTable是Flutter中的一个控件,它可以用于显示表格数据。DataTable是由多个TableRow组成的,每个TableRow代表一行数据,每个TableCell代表一个单元格。 2. DataTable使用方法 a. 创建一个DataTable 创建一个DataTable需要使用DataTable构造函数,并传入两个必要参数:columns和rows。 columns代表表格的列,它是一个列表,每个元素都是一个DataColumn对象。DataColumn有两个必要参数:label和tooltip,分别代表列标题和列提示。 rows代表表格的数据,它是一个列表,每个元素都是一个DataRow对象。DataRow有两个必要参数:cells和selected,分别代表行数据和是否选中。 b. 设置DataTable属性 DataTable还有一些可选属性,可以用于自定义表格的样式和行为。例如: sortColumn:可以设置表格默认排序的列。 sortAscending:可以设置表格默认排序的顺序。 onSelectAll:可以设置全选和取消全选的回调函数。 3. DataTable示例 下面是一个简单的DataTable示例: ``` DataTable( columns: [ DataColumn(label: Text('Name')), DataColumn(label: Text('Age')), DataColumn(label: Text('Gender')), ], rows: [ DataRow(cells: [ DataCell(Text('Alice')), DataCell(Text('18')), DataCell(Text('Female')), ]), DataRow(cells: [ DataCell(Text('Bob')), DataCell(Text('20')), DataCell(Text('Male')), ]), DataRow(cells: [ DataCell(Text('Charlie')), DataCell(Text('22')), DataCell(Text('Male')), ]), ], ) ``` 以上就是Flutter中DataTable的使用方法和示例。希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值