Flutter 在Flatter中组合SingleChildScrollView和PageView

Flutter 在Flatter中组合SingleChildScrollView和PageView,flutter,scrollable,pageviews,Flutter,Scrollable,Pageviews,我创建了两个表单,并将它们添加到页面视图中。每个表单有6个TextFormField。当我点击最后2个TextFormField时,键盘会显示在这些字段上并隐藏它们。我需要的是,当我点击每个字段并且键盘可见时,向上滚动表单以显示这些字段。 对于这种方法,我尝试在PageView下使用SingleChildScrollView,如示例中所示,但它不能满足我的需要。 我怎样才能解决这个问题 Widget build(BuildContext context) { return Scaffol

我创建了两个表单,并将它们添加到页面视图中。每个表单有6个TextFormField。当我点击最后2个TextFormField时,键盘会显示在这些字段上并隐藏它们。我需要的是,当我点击每个字段并且键盘可见时,向上滚动表单以显示这些字段。 对于这种方法,我尝试在PageView下使用SingleChildScrollView,如示例中所示,但它不能满足我的需要。 我怎样才能解决这个问题

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您为什么接受这个答案。这毫无意义。填充将启用滚动。