flutter(六,页面布局篇)

Tags: flutter

Flutter页面布局篇

[TOC]


1. 布局及装饰组件说明

组件名称 中文释义 说明
Align 对齐布局 指定child的对齐方式
AspectRatio 调整宽高比 根据设置的宽高比调整child组件
BaseLine 基准线布局 所有的child底部所在的同一水平线
Center 居中布局 child处于水平和垂直方向的中间位置
Column 垂直布局 对child在垂直方向进行排列
ConstrainedBox 限定宽高 限定child的最大值
Container 容器布局 容器布局是一个组合的Widget,包含定位和尺寸
FittedBox 缩放布局 缩放以及位置调整
FractionallySizedBox 百分比布局 根据现有空间按照百分比调整child的尺寸
GridView 网格布局 对多行多列同时进行操作
IndexedStack 栈索引布局 IndexedStack继承自Stack,显示第index个child,其他child是不可见的
LimitedBox 限定宽高布局 对最大宽高进行限制
ListView 列表布局 用列表方式进行布局,如多项数据的场景
Offstage 开关布局 控制是否显示组件
OverflowBox 溢出父容器显示 允许child超出父容器的范围显示
Padding 填充布局 处理容器和chid之间的间距
Row 水平布局 对child在水平方向进行排列
SizedBox 设置具体尺寸 用特定大小的盒子来限定child宽度和高度
Stack/Alignment Alignment栈布局 根据Alignment组件的属性将child定位在Stack组件上
Stack/Positioned Positioned栈布局 根据Positioned组件的属性将child定位在Stack组件上
Table 表格布局 使用表格的行和列进行布局
Transform 矩阵转换 做矩阵变换,对child做平移、旋转、缩放等操作
Wrap 按宽高自动换行 按宽度或高度,让child自动换行布局

2. 基础布局处理

2.1 Container(容器布局)

Container在Flutter里使用非常多,是一个组合Widget,内部有绘制Widget、定位Widget和尺寸Widget。

2.2 Center(居中布局)

居中布局,子元素处于水平和垂直方向的中间。

2.3 Padding(填充布局)

用于处理容器和子元素间的间距。

2.4 Align(对齐布局)

将子组件按指定方式对齐,并根据子组件的大小调整自己的大小。

2.5 Row(水平布局)

水平方向是主轴,垂直方向是交叉轴。

2.6 Column(垂直布局)

垂直方向是主轴,水平方向是交叉轴。

2.7 FittedBox(缩放布局)

FittedBox会在自己的尺寸范围内缩放并调整child位置。
两个重要属性:
fit:缩放方式。默认值是BoxFix.contain,即child在FittedBox范围内,尽可能大。contain是在保证child宽高比的前提下,尽可能填满。
alignment:对齐方式。默认值是Alignment.center,居中显示child。

2.8 Stack/Alignment

Stack常用属性

属性名 类型 默认值 说明
alignment AlignmentGeometry Alignment.topLeft 对齐方式

对齐方式有以下几种:

  • bottomCenter 底部居中
  • bottomLeft 底部居左
  • bottomRight 底部居右
  • center 正中
  • centerLeft 中间居左
  • centerRight 中间居右
  • topCenter 顶部居中
  • topLeft 顶部居左
  • topRight 顶部居右

2.9 Stack/Positioned

Positioned组件用来定位的。Stack里使用Positioned布局主要是因为在Stack组件里通常需要定位。

Positioned常用属性

属性名 类型 说明
top double 子元素相对顶部边界距离
bottom double 子元素相对底部边界距离
left double 子元素相对左侧边界距离
right double 子元素相对右侧边界距离

2.10 IndexedStack

继承自Stack,用于显示第index个child,其他child不可见,所以它的尺寸与child中最大尺寸一致。

2.11 OverFlowBox

允许child超出父容器范围显示。
常用属性

属性名 类型 说明
alignment AlignmentGeometry 对齐方式
minWidth double 允许child最小宽度,如果child宽度小于该值,按照最小宽度显示
maxWidth double 允许child最大宽度,如果child宽度大于该值,按照最大宽度显示
minHeight double 允许child最小高度,如果child宽度小于该值,按照最小高度显示
maxHeight double 允许child最大高度,如果child宽度大于该值,按照最大高度显示

3. 宽高尺寸处理

3.1 SizedBox

特定大小的盒子,强制child有特定的宽度和高度。如果宽度或高度为null,该组件会调整自身大小以匹配child的尺寸。

3.2 ConstrainedBox

用于限定child的最大、最小宽高。如果child为null,会尽可能缩小尺寸。
常用属性

属性名 类型 说明
constraints BoxConstraints child的限制条件,限制最大、最小宽高
child Widget 子元素组件

3.3 LimitedBox

用于限定最大宽高,与ConstainedBox类似,只是LimitedBox没有最小宽高限制。
常用属性

属性名 类型 默认值 说明
maxWidth double double.infini 最大宽度
maxHeight double double.infinity 最大高度

3.4 AspectRatio

用于设置调整child的宽高比。适用于需要固定组件宽高比的情景。aspectRatio属性不能为null,必须大于0且必须是有限的。

3.5 FractionallySizedBox

会根据现有空间调整child的尺寸,适用在一个区域里取百分比尺寸时。如果宽高因子为null,则child的宽高会尽可能充满整个区域。

常用属性

属性名 类型 说明
alignment AlignmentGeometry 对齐方式,不能为null
widthFactor double 宽度因子,宽度乘以该值,就是最后的宽度
heightFactor double 高度因子,用作计算最后实际高度

4. 列表及表格布局

4.1 ListView

4.2 GridView

4.3 Table

表格布局,每一行的高度由内容决定,每一列的宽度由列数决定。

常用属性

属性名 类型 说明
columnWidths Map<int, TableColumnWidth> 设置每一列的宽度
defaultColumnWidth TableColumnWidth 默认的每一列宽度,默认情况下均分
textDeirection TextDirection 文字方向
border TableBorder 表格边框
defaultVerticalAlignment TableCellVerticalAlignment 对齐方向。默认垂直方向
textBaseLine TextBaseLine defaultVerticalAlignment为baseline时,会用到该属性

5. 其他布局

5.1 Transform

矩阵转换。可以对child做平移、旋转、缩放等操作。

常用属性

属性名 类型 说明
transform Matrix4 一个4x4矩阵
origin Offset 旋转点,相对于左上角顶点的偏移。默认为左上角顶点
alignment AlignmentGeometry 对齐方式
transformHitTests bool 点击区域是否也做相应的改变

5.2 Baseline

基准线布局,将所有元素底部放在同一水平线上。

常用属性

属性名 类型 说明
baseline double baseline数值,必须要有,从顶部算
baselineType TextBaseline baseline类型,必须要有。目前两种类型:alphabetic对齐底部,ideographic对齐

5.3 Offstage

用于控制child是否显示。

常用属性

属性名 类型 默认值 说明
offstage bool true 默认为true表示不显示,false时显示该组件

5.4 Wrap

跟row和column有些相似。单行的Wrap跟Row一样,单列的Wrap跟Column一样。适用于需要按宽度或高度让child自动换行的场景。

常用属性

属性名 类型 默认值 说明
direction Axis Axis.horizontal 主轴方向,默认水平
alignment WrapAlignment WrapAlignment.start 主轴方向对齐方式,默认为start
spacing double 0.0 主轴方向的间距
runAlignment WrapAlignment WrapAlignment.start run的对齐方式,可以理解为新的行或列
runSpacing double 0.0 run的间距
crossAxisAlignment WrapAlignment WrapAlignment.start 交叉轴方向对齐方式
textDirection TextDirection - 文本方向
verticalDirection VerticalDirection - children的摆放顺序,默认是down
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,265评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,274评论 1 288
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,087评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,479评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,782评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,218评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,594评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,316评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,955评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,274评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,803评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,177评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,732评论 3 229
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,953评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,687评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,263评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,189评论 2 258

推荐阅读更多精彩内容

  • 前言 本文的目的是为了让读者掌握不同布局类Widget的布局特点,分享一些在实际使用过程遇到的一些问题,在《Flu...
    xqqlv阅读 5,167评论 0 18
  • 本文主要介绍了Flutter布局相关的内容,对相关知识点进行了梳理,并从实际例子触发,进一步讲解该如何去进行布局。...
    Q吹个大气球Q阅读 9,585评论 6 51
  • 项目演示github地址 Flutter 的界面基本由Widgets组成,widget需要位于MaterialAp...
    wayDevelop阅读 2,545评论 1 1
  • 做为传说中没有吃过一口奶粉的娃,小丸子(对,她二岁半以前叫小丸子,自我意识萌芽后,就把这个小名给推翻了)从一岁后就...
    Joyce_xwz阅读 266评论 0 0
  • 你所接受的一切信息,构成了你的思维方式。所以,长期接受碎片信息的后果,就是让你的思维变得狭隘,难以进行复杂的思考。...
    泰尚律联TSLL阅读 538评论 2 12