我创建了两个表单,并将它们添加到PageView中。每个表单都有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(...), ], ), ), ], ), ), ); }
我已经对此进行了测试。
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}"),), ], ), ), ], ), ), ); } }
您只需要一些额外的填充来显示内容即可。