我想实现一个布局,只有主按钮部件将始终留在脚手架的底部。其他部件将放置在SingleChildScrollView
-〉Column
中。
但是当TextField
或TextFormField
被聚焦时,键盘应该推动全屏直到布局的底部,这样按钮就可以看到了。
使用SingleChildScrollView只会将TextField
或TextFormField
保留在键盘上方,而不会将按钮保留在键盘上方。
我的代码:
body: SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Container(
height: screenHeight(context) - kToolbarHeight - 24,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
PlaceHolder(),
SizedBox(height: 20.0),
Text('Select Time'),
SizedBox(height: 10.0),
PlaceHolder(),
SizedBox(height: 20.0),
PlaceHolder(),
SizedBox(height: 20.0),
// InputField is a TextFormField
InputField(
controller: _dataController,
labelText: 'Enter Data',
fieldFocusNode: _dataFocusNode,
textInputType: TextInputType.text,
),
SizedBox(height: 20.0),
CheckboxListTile(),
SizedBox(height: 20.0),
PrimaryButton(
buttonText: 'Save',
onPressed: () {},
),
SizedBox(height: 20.0),
],
),
),
),
这里有两个屏幕布局。您可以忽略除TextFormField
和Main Button
之外的所有其他小部件。
屏幕一:不带键盘(TextField
或TextFormField
未对焦)
屏幕二:带键盘(TextField
或TextFormField
为焦点)
2条答案
按热度按时间q9yhzks01#
请按照以下步骤操作:
**1.**取下固定高度的
Container
。**2.**在页面底部添加一个
Padding
小部件,并将其bottom
填充设置为MediaQuery.of(context).viewInsets.bottom
。**3.**将
reverse: true
添加到SingleChildScrollView
。**4.**将
resizeToAvoidBottomInset: false
添加到Scaffold
。**5.**将
resizeToAvoidBottomPadding: false
添加到Scaffold
中。完整编码:(更改用注解标记)
y4ekin9u2#
用
SingleChildScrollView
包裹屏幕