ListBody
一个沿给定轴向依次排列子项的组件,并强制它们在另一个轴向的尺寸与父级相同
ListBody会在指定方向上依次排列子组件,并强制这些子组件在另一个方向上的大小与父组件相同。ListBody是一个轻量级的布局组件,用于按单一方向(垂直或水平)线性排列其子组件,类似于简化版的Column或Row,但没有弹性空间分配如Expanded或主轴对齐等高级功能。
核心特点
1. 单向排列
通过axis参数控制方向(默认Axis.vertical即垂直排列)
ListBody(
axis: Axis.horizontal,
children: [Text('A'), Text('B'), Text('C')]
)
2. 无对齐和弹性
与Column/Row不同,ListBody不会尝试填充主轴空间,子组件仅按自然尺寸排列,如:
- 垂直排列时,子组件高度为自身高度,总高度为所有子组件之和。
- 水平排列时,子组件宽度为自身宽度,总宽度为所有子组件之和。
3. 常用于ListView的底层
ListView在内部使用ListBody实现子组件的线性排列。
4. 无滚动能力
需要滚动时,应使用ListView而非ListBody。
何时使用ListBody
- 简单场景,当只需要按单一方向排列子组件,且不需要对齐、弹性空间或滚动时。
- 自定义滚动容器,结合
SingleChildScrollView实现自定义滚动效果(但通常直接用ListView更简单)。
构造函数
ListBody.new({
Key? key,
Axis mainAxis = Axis.vertical,
bool reverse = false,
List<Widget> children = const <Widget>[]
})
属性
| 属性名 | 类型 | 说明 |
|---|---|---|
| children | List<Widget> | 子组件列表 |
| mainAxis | Axis | 主轴方向 |
| reverse | bool | 反向排列 |