Flutter 在使用SingleChildScrollView时,如何在颤振中调整屏幕底部的按钮?
我想在底部添加调整按钮。 问题是,我使用的是单个ChildScrollView+列。即使我添加了间隔符,它也会占用小部件中无限的空间。不过,它确实适用于singleChildScrollView,但随后会出现像素溢出错误 下面是我的代码Flutter 在使用SingleChildScrollView时,如何在颤振中调整屏幕底部的按钮?,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我想在底部添加调整按钮。 问题是,我使用的是单个ChildScrollView+列。即使我添加了间隔符,它也会占用小部件中无限的空间。不过,它确实适用于singleChildScrollView,但随后会出现像素溢出错误 下面是我的代码 body: Padding( padding: const EdgeInsets.all(16.0), child: Form( key: _form, child: SingleChildScrollView(
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _form,
child: SingleChildScrollView(
child: Column(children: <Widget>[
// Works in form only.
// We dont need focusNode or focusScope. Since we are in new version.
TextFormField(
decoration: InputDecoration(labelText: 'Title'),
textInputAction: TextInputAction.next, // Moves to next field.
keyboardType: TextInputType.name,
onSaved: (value) {
_editedProduct = Product(
id: null,
title: value,
description: _editedProduct.description,
price: _editedProduct.price,
imageUrl: _editedProduct.imageUrl,
);
},
),
TextFormField(
decoration: InputDecoration(labelText: 'Price (\$)'),
textInputAction: TextInputAction.next, // Moves to next field.
keyboardType: TextInputType.number,
onSaved: (value) {
_editedProduct = Product(
id: null,
title: _editedProduct.title,
description: _editedProduct.description,
price: double.parse(value),
imageUrl: _editedProduct.imageUrl,
);
},
),
TextFormField(
decoration: InputDecoration(labelText: 'Description'),
maxLines: 3,
// Since we dont need to move to next control.
// textInputAction: TextInputAction.next, // Moves to next field.
keyboardType: TextInputType.multiline,
onSaved: (value) {
_editedProduct = Product(
id: null,
title: _editedProduct.title,
description: value,
price: _editedProduct.price,
imageUrl: _editedProduct.imageUrl,
);
},
),
Divider(),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
Container(
width: 100,
height: 100,
margin: EdgeInsets.only(top: 8, right: 10),
decoration: BoxDecoration(
border: Border.all(
width: 1,
color: Colors.grey,
)),
child: Container(
child: _imageUrlController.text.isEmpty
? Text('Enter a URL')
: FittedBox(
child: Image.network(_imageUrlController.text),
fit: BoxFit.fill,
),
),
),
Expanded(
child: TextFormField(
decoration: InputDecoration(labelText: 'Image URL'),
keyboardType: TextInputType.url,
textInputAction: TextInputAction.done,
controller: _imageUrlController,
focusNode: _imageUrlFocusNode,
onFieldSubmitted: (value) => _submitForm(),
onSaved: (value) {
_editedProduct = Product(
id: null,
title: _editedProduct.title,
description: _editedProduct.description,
price: _editedProduct.price,
imageUrl: value,
);
},
),
),
]),
Container(
width: double.infinity,
height: 50,
margin: EdgeInsets.all(5),
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.all(Radius.circular(20))),
child: FlatButton(
child: Text(
'Submit',
// ignore: deprecated_member_use
style: Theme.of(context).primaryTextTheme.title,
),
onPressed: (_submitForm),
),
),
]),
),
),
),
正文:填充(
填充:常数边集全部(16.0),
孩子:表格(
键:_形式,
子:SingleChildScrollView(
子项:列(子项:[
//只在形式上起作用。
//我们不需要focusNode或focusScope。因为我们在新版本中。
TextFormField(
装饰:输入装饰(标签文本:“标题”),
textInputAction:textInputAction.next,//移动到下一个字段。
键盘类型:TextInputType.name,
已保存:(值){
_editedProduct=产品(
id:null,
标题:价值,
description:_editedProduct.description,
价格:_editedProduct.price,
imageUrl:_editedProduct.imageUrl,
);
},
),
TextFormField(
装饰:输入装饰(标签文本:“价格(\$)”),
textInputAction:textInputAction.next,//移动到下一个字段。
键盘类型:TextInputType.number,
已保存:(值){
_editedProduct=产品(
id:null,
标题:_editedProduct.title,
description:_editedProduct.description,
价格:double.parse(值),
imageUrl:_editedProduct.imageUrl,
);
},
),
TextFormField(
装饰:输入装饰(标签文本:“说明”),
maxLines:3,
//因为我们不需要移动到下一个控制。
//textInputAction:textInputAction.next,//移动到下一个字段。
键盘类型:TextInputType.multiline,
已保存:(值){
_editedProduct=产品(
id:null,
标题:_editedProduct.title,
说明:价值,
价格:_editedProduct.price,
imageUrl:_editedProduct.imageUrl,
);
},
),
分隔符(),
划船(
crossAxisAlignment:crossAxisAlignment.end,
儿童:[
容器(
宽度:100,
身高:100,
页边距:仅限边集(顶部:8,右侧:10),
装饰:盒子装饰(
边界:边界(
宽度:1,
颜色:颜色。灰色,
)),
子:容器(
子项:_imageUrlController.text.isEmpty
?文本('输入URL')
:FittedBox(
子项:Image.network(_imageUrlController.text),
fit:BoxFit.fill,
),
),
),
扩大(
子项:TextFormField(
装饰:输入装饰(labelText:“图像URL”),
键盘类型:TextInputType.url,
textInputAction:textInputAction.done,
控制器:_imageUrlController,
focusNode:_imageUrlFocusNode,
onFieldSubmitted:(值)=>\u submitForm(),
已保存:(值){
_editedProduct=产品(
id:null,
标题:_editedProduct.title,
description:_editedProduct.description,
价格:_editedProduct.price,
imageUrl:value,
);
},
),
),
]),
容器(
宽度:double.infinity,
身高:50,
保证金:所有(5),
填充:边缘设置。全部(10),
装饰:盒子装饰(
颜色:主题。背景。原色,
borderRadius:borderRadius.all(半径.圆形(20)),
孩子:扁平按钮(
子:文本(
“提交”,
//忽略:不推荐的\u成员\u使用
样式:Theme.of(context).primaryTextTheme.title,
),
按下按钮:(_submitForm),
),
),
]),
),
),
),
在scafold小部件中添加底部表单
Scafold(底片:submitButton(),body:formWidget())如果您不想使用scaffold中的底片,还有其他选择
Column(
mainAxisSize: mainAxisSize.max,
children:[
Expanded(child: SingleChildScrollView(child: .....),),
Button()
]
)