当键盘遮挡了textField时,如何将其带入视图中?

12 浏览
0 Comments

当键盘遮挡了textField时,如何将其带入视图中?

我知道这是一个常见的问题,但我找不到一个确切的解决方案来解决我的问题。我创建了一个包含底部TextField的小部件的列视图,当键盘弹出时,textField被隐藏了。

最初,视图溢出了,所以我设置了resizeToAvoidBottomPadding: false来解决这个问题。

然而,现在文本字段完全被隐藏了。

我在代码中使用了Spacer和flex,因此不想切换到ListView。

我该如何解决这个问题?

0
0 Comments

问题的出现的原因是:在使用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的内容即可。

0
0 Comments

问题出现的原因是当键盘遮挡了TextField时,需要将TextField带到可视区域内。解决方法是使用SingleChildScrollView包裹需要显示的部件,然后将TextField放在可滚动的区域内。以下是解决方法的示例代码:

SingleChildScrollView(

child: Column(

children: [

drawerIcon(),

buttonForSomething,

fillerRow(5),

checkBoxForSomething(),

checkBoxForSomeOtherThing(),

...

],

),

)

同时,可以参考此链接获取更多帮助。在Column中使用Spacer Widget可能会导致渲染错误。我在一个虚拟的Flutter应用中进行了测试,添加了一些随机组件,包括Spacer(flex)。然后,在底部放置了一个TextField。当键盘弹出时,我发现像素溢出。然后,我将它们包裹在SingleChildScrollView中,问题成功解决了。

0