当键盘遮挡了textField时,如何将其带入视图中?
问题的出现的原因是:在使用Flex的Column内部需要放置在ScrollView中。当键盘显示时,希望列填满整个页面,当键盘隐藏时,尽量减少空白空间。如果在删除所有空白空间后仍然不适合屏幕剩余空间,则需要能够滚动列。
解决方法是使用SingleChildScrollView来实现滚动,并使用LayoutBuilder来获取子组件的最大高度。同时需要使用IntrinsicHeight来确保Column只占用其内容所需的高度。还需要使用ConstrainedBox来设置Column的最小高度,以确保Column至少与屏幕允许的高度一样。
以下是实现这个布局的示例代码:
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints viewportConstraints) {
return SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(
minHeight: viewportConstraints.maxHeight,
),
child: IntrinsicHeight(
child: Column(
children:
Container(
// A fixed-height child.
color: const Color(0xff808000), // Yellow
height: 120.0,
),
Expanded(
// A flexible child that will grow to fit the viewport but
// still be at least as big as necessary to fit its contents.
child: Container(
color: const Color(0xff800000), // Red
height: 120.0,
),
),
],
),
),
),
);
},
);
}
以上是一个复杂的布局,需要使用多个不同的小部件来实现。但好消息是,您只需要复制粘贴这段代码,并更改Column的内容即可。
问题出现的原因是当键盘遮挡了TextField时,需要将TextField带到可视区域内。解决方法是使用SingleChildScrollView包裹需要显示的部件,然后将TextField放在可滚动的区域内。以下是解决方法的示例代码:
SingleChildScrollView(
child: Column(
children:
drawerIcon(),
buttonForSomething,
fillerRow(5),
checkBoxForSomething(),
checkBoxForSomeOtherThing(),
...
],
),
)
同时,可以参考此链接获取更多帮助。在Column中使用Spacer Widget可能会导致渲染错误。我在一个虚拟的Flutter应用中进行了测试,添加了一些随机组件,包括Spacer(flex)。然后,在底部放置了一个TextField。当键盘弹出时,我发现像素溢出。然后,我将它们包裹在SingleChildScrollView中,问题成功解决了。