在我的 Flutter 应用程序中,我有一个带有 PageView
的屏幕,用于显示卡片。有些卡片有TextFields
,所以我把Screen放到一个SingleChildScrollView
中,这样Keyboard将屏幕推到最上面,不重叠。下面是代码示例:
class DummyScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: PageView(
physics: NeverScrollableScrollPhysics(),
children: [
DummyCard(),
],
),
),
);
}
}
现在,一些卡片有很多 TextFields,在较小的屏幕上它会太大。所以我也把它们放到了 ScrollView 中。这意味着我有一个包含 ScrollView
、PageView
内、ScrollView
内的小部件:
(这不是确切的代码,显然缺少样式部分)
class DummyCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Card(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 14, vertical: 14),
child: Scrollbar(
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
TextFormField(
decoration: InputDecoration(hintText: "TextField 1"),
),
SizedBox(
height: 10,
),
TextFormField(
decoration: InputDecoration(hintText: "TextField 2"),
),
SizedBox(
height: 10,
),
TextFormField(
decoration: InputDecoration(hintText: "TextField 3"),
),
SizedBox(
height: 10,
),
TextFormField(
decoration: InputDecoration(hintText: "TextField 4"),
),
SizedBox(
height: 10,
),
TextFormField(
decoration: InputDecoration(hintText: "TextField 5"),
),
],
),
),
),
),
);
}
}
PageView
不应该是可滚动的,但应该在点击按钮时更改页面。所以这没有问题。当键盘没有打开时,这也不是问题,因为当键盘没有打开时,外部的 ScrollView
是不可滚动的。当我点击 TextField 并且键盘弹出时会出现问题。现在我在外面(整个屏幕)有一个可滚动的 ScrollView
,在 ScrollView
里面有一个可滚动的 Card
,这导致了以下两个问题:
Card
内部的屏幕时,我只能滚动内部 ScrollView
,即使我已经“滚动到最后”。因此,当我想滚动外部 ScrollView
时,我必须点按 Card
外部的屏幕,这不是很好的用户体验。TextField
时,我希望屏幕被推到顶部。但是由于 TextFields
位于内部 ScrollView
内部,它只会将内部 ScrollView
推到顶部,这通常会导致键盘仍然与 TextField
重叠。我知道让 2 个 ScrollViews
具有相同的滚动方向相互嵌套并不是一个好习惯。但这是我想到的唯一解决方案。我绝对需要卡片内的 ScrollView
。而且我还想在键盘弹出时将屏幕推到顶部,我不想缩小屏幕(我的布局不可能)。那么,关于如何解决上述两个问题的任何想法?
答案 0 :(得分:0)
Scaffold 有一个属性,可以防止在键盘打开时调整页面大小,默认情况下为 true。尝试将其设置为 false
<块引用>布尔? resizeToAvoidBottomInset