代码之家  ›  专栏  ›  技术社区  ›  Shane McX

在flutter中,如何在窗口的顶部和底部排列小部件?

  •  1
  • Shane McX  · 技术社区  · 2 年前

    我有三个小部件,我希望顶部的小部件在最顶部,底部的小部件位于最底部。中间的小部件可以等距排列,也可以刚好在顶部小部件(最好是后者)的下方。

    =================
    top widget
    
    <some space>
    
    middle widget
    
    <some (or more) space>
    
    bottom widget
    =================
    

    我想我可能可以使用LayoutWidget来计算我需要多少空间,使用MainAxisAlignment。启动并在中间和底部小部件之间插入一个间隔小部件,但我希望有一种更自然的方法来做到这一点。

    我试着把它们放在一个专栏里 mainAxisAlignment: MainAxisAlignment.spaceEvenly ,

          body: Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              BoardWidget(board: widget.board),
              TipWidget(board: widget.board),
              OnScreenKeyboard(onKeyPressed: _onKeyPress),
            ],
          ),
    

    但这增加了顶部和底部以及小部件之间的空间。

    基于 flutter - how to align at the top and at the bottom (this is the issue) - and column middle part ,我尝试添加一个扩展,如下所示:

          body: Column(
            mainAxisAlignment: MainAxisAlignment.start,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              BoardWidget(board: widget.board),
              TipWidget(board: widget.board),
              Expanded(
                child: Align(
                    alignment: Alignment.bottomCenter,
                    child: OnScreenKeyboard(onKeyPressed: _onKeyPress)),
              ),
            ],
          ),
    

    但这似乎没有任何影响(我不确定我是否完全理解这个简短的答案,tbh)。

    使现代化 : 感谢下面的回答,我的结局是这样的。可能仍然会按照建议进行调整,但它正是我想要做的:

          body: Column(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              BoardWidget(board: widget.board),
              TipWidget(board: widget.board),
              const Spacer(),
              OnScreenKeyboard(onKeyPressed: _onKeyPress),
            ],
          ),
    
    2 回复  |  直到 2 年前
        1
  •  1
  •   A-E    2 年前

    您可以通过以下方式实现:

    1. mainAxisAlignment = MainAxisAlignment.spaceBetween ,(在列的小部件之间划分剩余空间,但不在它们之前或之后)。

    2. 您可以在小部件之间使用间隔器小部件,并为每个间隔器提供一个弹性值,以分配剩余空间的特定百分比。(推荐用于您的目标)。 check spacer

        2
  •  1
  •   pgs    2 年前

    您的第一列已接近,只需使用 MainAxisAlignment.spaceBetween .