Flutter 在Flatter中组合SingleChildScrollView和PageView
我创建了两个表单,并将它们添加到页面视图中。每个表单有6个TextFormField。当我点击最后2个TextFormField时,键盘会显示在这些字段上并隐藏它们。我需要的是,当我点击每个字段并且键盘可见时,向上滚动表单以显示这些字段。 对于这种方法,我尝试在PageView下使用SingleChildScrollView,如示例中所示,但它不能满足我的需要。 我怎样才能解决这个问题Flutter 在Flatter中组合SingleChildScrollView和PageView,flutter,scrollable,pageviews,Flutter,Scrollable,Pageviews,我创建了两个表单,并将它们添加到页面视图中。每个表单有6个TextFormField。当我点击最后2个TextFormField时,键盘会显示在这些字段上并隐藏它们。我需要的是,当我点击每个字段并且键盘可见时,向上滚动表单以显示这些字段。 对于这种方法,我尝试在PageView下使用SingleChildScrollView,如示例中所示,但它不能满足我的需要。 我怎样才能解决这个问题 Widget build(BuildContext context) { return Scaffol
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomPadding: false,
body: PageView(
children: <Widget>[
_sampleForm(),
_sampleForm(),
],
),
)
}
_sampleForm(){
return Container(
margin: const EdgeInsets.fromLTRB(0, 0, 0, 10),
width: MediaQuery.of(context).size.width,
child: SingleChildScrollView(
child: Column(
children: <Widget>[
Form(
child: Column(
children: <Widget>[
TextFormField(...),
TextFormField(...),
TextFormField(...),
TextFormField(...),
TextFormField(...),
TextFormField(...),
],
),
),
],
),
),
);
}
小部件构建(构建上下文){
返回脚手架(
resizeToAvoidBottomPadding:false,
正文:页面视图(
儿童:[
_sampleForm(),
_sampleForm(),
],
),
)
}
_样本形式(){
返回容器(
边距:LTRB(0,0,0,10)的常数边集,
宽度:MediaQuery.of(context).size.width,
子:SingleChildScrollView(
子:列(
儿童:[
形式(
子:列(
儿童:[
TextFormField(…),
TextFormField(…),
TextFormField(…),
TextFormField(…),
TextFormField(…),
TextFormField(…),
],
),
),
],
),
),
);
}
我已经测试过了
class SO extends StatefulWidget {
@override
_SOState createState() => _SOState();
}
class _SOState extends State<SO> {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(""),
),
body: PageView(
children: <Widget>[
_sampleForm("Page 1"),
_sampleForm("Page 2"),
],
),
);
}
_sampleForm(String title) {
return SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(32.0),
child: Column(
children: <Widget>[
Form(
child: Column(
children: <Widget>[
ListTile(title: Text(title, textAlign: TextAlign.center)),
for (int i = 0; i < 10; i++) TextFormField(decoration: InputDecoration(hintText: "field ${i+1}"),),
],
),
),
],
),
),
);
}
}
类因此扩展了StatefulWidget{
@凌驾
_SOState createState()=>\u SOState();
}
类_SOState扩展了状态{
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“”),
),
正文:页面视图(
儿童:[
_样本表格(“第1页”),
_样本表格(“第2页”),
],
),
);
}
_样本格式(字符串标题){
返回SingleChildScrollView(
孩子:填充(
填充:常数边集全部(32.0),
子:列(
儿童:[
形式(
子:列(
儿童:[
ListTile(标题:文本(标题,textAlign:textAlign.center)),
对于(inti=0;i<10;i++)TextFormField(修饰:input装饰(hintText:“field${i+1}”),
],
),
),
],
),
),
);
}
}
只需要一些额外的填充来显示内容就是您所需要的。@sfirc您为什么接受这个答案。这毫无意义。填充将启用滚动。