Flutter SingleChildScrollViewheight 到屏幕高度

F.M*_*.M. 2 flutter flutter-layout

我有一个列和其中的三个元素。我将 mainAxisAlignment 设置为 MainAxisAlignment.spaceBetween,以便第一个元素位于我的应用程序顶部。第二个在中间,第三个在底部。现在我想将其包装在滚动视图中,以便如果列的内容比视图高,则可以滚动它。例如,当键盘弹出时就会发生这种情况。

我的代码看起来有点像这样:

Column(
   mainAxisAlignment: MainAxisAlignment.spaceBetween,
   children: [
      Element1(),
      Element2(),
      Element3(),
      ]
)
Run Code Online (Sandbox Code Playgroud)

Column 将其高度扩展到整个屏幕。这也是我想要的。

但现在如果我将它包装在 SingelChildScrollView 中,它会缩小到最小内容高度。:(

SingleChildScrollView(
   child: Column(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
         Element1(),
         Element2(),
         Element3(),
         ]
   ),
)
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使列继续扩展到屏幕的整个视图高度,并且一旦其内容高于屏幕高度就可以滚动?

The*_*eer 6

您应该能够通过使用来做到这一点ConstrainedBoxLayoutBuilder这将强制Column采用最大可用高度

LayoutBuilder(
      builder: (context, constraints) => SingleChildScrollView(
        child: ConstrainedBox(
          constraints: BoxConstraints(
            minHeight: constraints.maxHeight,
          ),
          child: Column(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Element1(),
                Element2(),
                Element3(),
              ]),
        ),
      ),
    )
Run Code Online (Sandbox Code Playgroud)

  • 它基本上很好,有一个+1,但是你应该删除`mainAxisSize:MainAxisSize.min`,它被父级的严格约束覆盖,并且让代码读者感到困惑。 (2认同)