在 Flutter 中结合 SingleChildScrollView 和 PageView
Combine SingleChildScrollView and PageView in Flutter
我创建了两个表单,并将它们添加到 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}"),),
],
),
),
],
),
),
);
}
}
只需一些额外的填充来显示内容即可。
我创建了两个表单,并将它们添加到 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}"),),
],
),
),
],
),
),
);
}
}
只需一些额外的填充来显示内容即可。