面试题答案
一键面试Row
- 特性
- 水平排列子Widget:Row会将其子Widget在水平方向上依次排列。
- 主轴与交叉轴:主轴为水平方向,交叉轴为垂直方向。
- 尺寸限制:Row在主轴方向上尽可能扩展以适应父容器,在交叉轴方向上会根据子Widget的尺寸或者自身的
mainAxisSize
属性来确定大小。mainAxisSize
默认为MainAxisSize.max
,即尽可能占据父容器空间;若设置为MainAxisSize.min
,则会尽量收缩。 - 对齐方式:通过
mainAxisAlignment
和crossAxisAlignment
属性来控制子Widget在主轴和交叉轴上的对齐方式。mainAxisAlignment
常见值有start
(起始位置对齐,默认值)、end
(末尾位置对齐)、center
(居中对齐)、spaceBetween
(两端对齐,子Widget之间间隔相等)、spaceAround
(子Widget两侧间隔相等,且子Widget之间间隔是两侧间隔的两倍)、spaceEvenly
(子Widget之间以及两侧间隔都相等)。crossAxisAlignment
常见值有start
、end
、center
、stretch
(拉伸子Widget以填充交叉轴方向空间)。
- 使用场景
- 导航栏:如底部导航栏,将多个图标和文字水平排列,用户可以通过点击不同的导航项进行页面切换。
- 水平菜单:例如在应用顶部的菜单区域,菜单项以水平排列展示。
- 图片与文字同行展示:在文章摘要等场景中,图片与相关的文字描述在同一行显示。
Column
- 特性
- 垂直排列子Widget:Column将其子Widget在垂直方向上依次排列。
- 主轴与交叉轴:主轴为垂直方向,交叉轴为水平方向。
- 尺寸限制:Column在交叉轴方向上尽可能扩展以适应父容器,在主轴方向上会根据子Widget的尺寸或者自身的
mainAxisSize
属性来确定大小。mainAxisSize
同样有MainAxisSize.max
和MainAxisSize.min
两个值,含义与Row中的类似。 - 对齐方式:同样通过
mainAxisAlignment
和crossAxisAlignment
属性来控制子Widget在主轴和交叉轴上的对齐方式,取值与Row中的相同。不过由于主轴和交叉轴方向不同,实际效果有所差异。
- 使用场景
- 列表展示:如商品列表,每个商品项在垂直方向依次排列,形成列表。
- 表单布局:表单中的各种输入框、标签等组件通常垂直排列,方便用户按顺序填写信息。
- 侧边栏:在一些应用布局中,侧边栏内容以垂直方式排列,方便用户操作和浏览。
Container
- 特性
- 多功能性:Container是一个非常通用的Widget,它可以包含单个子Widget,并且可以对其子Widget添加多种装饰,如背景颜色、边框、阴影等。
- 尺寸控制:可以通过
width
和height
属性来明确设置自身的尺寸,若不设置则会根据子Widget的大小自适应。也可以通过constraints
属性设置更复杂的尺寸限制。 - 边距与内边距:通过
padding
属性设置内边距,即Container内部与子Widget之间的间距;通过margin
属性设置外边距,即Container与周围其他Widget之间的间距。 - 装饰:通过
decoration
属性可以添加背景颜色、渐变、边框、圆角等装饰效果。例如BoxDecoration
类可以用于设置各种背景效果。
- 使用场景
- 基本组件包装:当需要对某个组件添加背景颜色、边框或者边距等简单样式时,可使用Container进行包装。比如按钮,为其添加背景色和圆角效果。
- 布局容器:可以作为一个基础的布局容器,在其内部使用Row、Column等布局来组织更复杂的界面结构。例如在页面的某个区域,使用Container设置背景色,并在内部通过Row和Column组合来排列具体的内容。
- 创建有特定样式的区域:如创建一个带有阴影和圆角的卡片式区域来展示信息,可通过Container的
decoration
属性来实现。