Flutter中如何将组件分置窗口顶、底部,中间组件靠上?
Flutter布局需求:顶部组件置顶、底部组件置底,中间组件紧跟顶部
我有三个Widget,希望顶部组件紧贴窗口最顶部,底部组件紧贴窗口最底部,中间组件优先紧跟在顶部组件下方(也可以接受均匀分布,但偏好前者)。预期布局效果如下:
================= top widget <some space> middle widget <some (or more) space> bottom widget =================
我本可以通过LayoutWidget计算空间,或者设置MainAxisAlignment.start后在中间与底部组件间插入Spacer,但希望有更自然的实现方式。
尝试的布局方案
方案1:使用MainAxisAlignment.spaceEvenly的Column
我尝试将三个组件放入设置了mainAxisAlignment: MainAxisAlignment.spaceEvenly的Column中:
body: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.center, children: [ BoardWidget(board: widget.board), TipWidget(board: widget.board), OnScreenKeyboard(onKeyPressed: _onKeyPress), ], ),
但这个方案会在组件之间、顶部组件与窗口顶部、底部组件与窗口底部都添加空隙,不符合需求。
方案2:尝试用Expanded包裹底部组件
基于StackOverflow相关回答,我尝试添加Expanded来实现:
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)), ), ], ),
但这个写法没有达到预期效果,我也没完全理解该方案的逻辑。
最终实现方案
更新:借助相关回答,我最终实现了符合需求的布局,后续可能会调整,但当前效果已经达标:
body: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ BoardWidget(board: widget.board), TipWidget(board: widget.board), const Spacer(), OnScreenKeyboard(onKeyPressed: _onKeyPress), ], ),
内容的提问来源于stack exchange,提问作者Shane McX
相关产品推荐
相关产品推荐

