Flutter 颤振-如何填充步进控制生成器中的剩余空间?
在屏幕截图中,我想将“下一步”和“上一步”按钮放在屏幕底部 步进器有一个参数,Flutter 颤振-如何填充步进控制生成器中的剩余空间?,flutter,flutter-layout,stepper,Flutter,Flutter Layout,Stepper,在屏幕截图中,我想将“下一步”和“上一步”按钮放在屏幕底部 步进器有一个参数,controlsBuilder,可用于构建控件的布局。如果它只是一个简单的行,它就放在内容的正下方 显然,步进机是一种灵活的包装机。我不知道那是什么意思。我认为这意味着Stepper被视为flex对象,因为它包含一个可滚动区域(用于内容)。阅读后,如果我理解正确,它说我不能使用主轴上最大尺寸的展开的或列,因为步进器本质上是一个可滚动区域,这意味着其中的任何渲染器框都有无限的约束 那么,有哪些方法可以将控件生成器向下推
controlsBuilder
,可用于构建控件的布局。如果它只是一个简单的行,它就放在内容的正下方
显然,步进机是一种灵活的包装机。我不知道那是什么意思。我认为这意味着Stepper被视为flex对象,因为它包含一个可滚动区域(用于内容)。阅读后,如果我理解正确,它说我不能使用主轴上最大尺寸的展开的
或列
,因为步进器本质上是一个可滚动区域,这意味着其中的任何渲染器框都有无限的约束
那么,有哪些方法可以将控件生成器向下推到底?
Widget _createEventControlBuilder(BuildContext context, {VoidCallback onStepContinue, VoidCallback onStepCancel}) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
FlatButton(
onPressed: onStepCancel,
child: const Text('BACK'),
),
FlatButton(
onPressed: onStepContinue,
child: const Text('NEXT'),
),
]
);
}
我认为您可以创建自己的
步进器
,也可以尝试这种“黑客”方法:
创建两个变量来存储回调:
VoidCallback _onStepContinue;
VoidCallback _onStepCancel;
将您的表单
放入堆栈中
:
Stack(
children: <Widget>[
Form(
child: Stepper(
添加自定义按钮:
Widget _bottomBar() {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
FlatButton(
onPressed: () => _onStepCancel(),
child: const Text('BACK'),
),
FlatButton(
onPressed: () => _onStepContinue(),
child: const Text('NEXT'),
),
]);
}
我知道这有点脏,但您可以尝试,否则我建议您创建自己的小部件。您也可以将步骤内容中小部件的高度更改为相同的值,并根据需要将其设置为
SingleChildScrollView
。e、 g
Step(content: Container(
height: MediaQuery.of(context).size.height - 250, //IMPORTANT
child: SingleChildScrollView(
child: Column(children: <Widget>[
...
),
步骤(内容:容器(
高度:MediaQuery.of(context).size.height-250,//重要
子:SingleChildScrollView(
子项:列(子项:[
...
),
你能把这个屏幕的所有代码都放进去吗?@diegoveloper添加了构建方法代码。谢谢。我会尝试一下。我的理解正确吗,Stepper
中的controlsBuilder
的当前实现不允许因为无限约束而向下推它?@ShrimpCrackers是的,有一些限制不允许填充屏幕的约束。
Widget _bottomBar() {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
FlatButton(
onPressed: () => _onStepCancel(),
child: const Text('BACK'),
),
FlatButton(
onPressed: () => _onStepContinue(),
child: const Text('NEXT'),
),
]);
}
Stack(
children: <Widget>[
Form(
child: Stepper(
....
), //Form
Align(
alignment: Alignment.bottomCenter,
child: _bottomBar(),
)
Step(content: Container(
height: MediaQuery.of(context).size.height - 250, //IMPORTANT
child: SingleChildScrollView(
child: Column(children: <Widget>[
...
),