ListBody

一个沿给定轴向依次排列子项的组件,并强制它们在另一个轴向的尺寸与父级相同

ListBody会在指定方向上依次排列子组件,并强制这些子组件在另一个方向上的大小与父组件相同。ListBody是一个轻量级的布局组件,用于按单一方向(垂直或水平)线性排列其子组件,类似于简化版的ColumnRow,但没有弹性空间分配如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>[]
})

属性

属性名类型说明
childrenList<Widget>子组件列表
mainAxisAxis主轴方向
reversebool反向排列