我有一个应用程序屏幕,顶部有一个标题,底部有几个按钮,中间的其余部分有一个输入表单。
我想要实现的目标:我希望输入表单子项(即不同的输入字段)在垂直轴上展开以填充可用空间。当键盘打开并占据大约 40% 的屏幕时,我希望输入字段之间的所有灵活空间都缩小,如果这还不足以显示所有内容,我希望“中心”部分可以滚动,所以用户可以找到其余的输入字段,现在隐藏在“下方”。
我正在使用SingleChildScrollView
with a child的组合Column
。小部件树(简化..)如下所示:
return Scaffold(
body: SafeArea(
child: Column(
children: [
Text('Title',style: TextStyle(fontSize: 32),),
Expanded(
child: Container(
color: Colors.redAccent,
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
TextFormField(decoration: InputDecoration(labelText: 'Firstname'),),
TextFormField(decoration: InputDecoration(labelText: 'Firstname'),),
TextFormField(decoration: InputDecoration(labelText: 'Firstname'),),
TextFormField(decoration: InputDecoration(labelText: 'Firstname'),),
TextFormField(decoration: InputDecoration(labelText: 'Firstname'),),
TextFormField(decoration: InputDecoration(labelText: 'Firstname'),),
TextFormField(decoration: InputDecoration(labelText: 'Firstname'),),
TextFormField(decoration: InputDecoration(labelText: 'Firstname'),),
],),),),),
ElevatedButton(onPressed: () => null, child: Text('Next')),
],),),);
当键盘打开时,上面的代码导致了这个,它缩小了Expanded
红色容器,并且是可滚动的,所以它是想要的结果:
但是,当键盘关闭时,我得到了这个:
所以在非键盘布局中,我希望输入字段均匀分布并占据整个红色空间。我已经尝试了各种组合,用Expanded
and包裹孩子,在输入字段之间Flexible
添加孩子,等等。Flexible
无法达到所需的状态。只会出现布局错误。