在Flutter中,如何调整垂直布局以及列和ListView行为之间的混合?

据我所知,当用于基本根布局时,Column和ListView都有非常不同的用法。

当屏幕上的组件很少(例如登录屏幕)时,使用列。我们可以添加一些扩展组件来调整它们之间的空白,因此当键盘可见时,屏幕会收缩以保持所有可见。

当屏幕上有许多可能需要滚动的组件时,将使用ListView。我们不能在ListView中使用Expanded组件。使用ListView时,出现的键盘不会更改空白,仅更改外部ListView的大小,而内部内容则包装在滚动视图中。

现在的问题是,如果我想要这样的屏幕,怎么办:

  • 当所有内容的组合垂直大小不超过父级给出的可用高度配额(在这种情况下,是屏幕的高度)时,组件的行为就像Column内部一样:根据Expanded设置的规则扩展或缩小以填充可用的空白。
  • 当所有内容的组合垂直大小都大于可用的高度配额时,组件的行为类似于ListView:所有可能的扩展组件将缩小为最小大小(忽略Expanded),并且屏幕可滚动,以便用户可以看到其余的下面的屏幕。

这可以在Flutter中完成吗?怎么样?