有没有办法在Flutter中获得开放式键盘的高度?我试图在键盘高度打开时填充bottomSheet
小部件。
答案 0 :(得分:6)
通常viewInsets
提供有关遮挡颤动ui的任何系统ui的数据。要了解键盘高度,您只需检查bottom
的{{1}}属性,当键盘在屏幕上时,这将保持键盘的高度为零。
您可以使用viewInsets
来检查viewInsets
,如:
MediaQuery
注意:MediaQuery.of(context).viewInsets.bottom
属性可能具有值,即使其他系统ui从底部遮挡了颤动ui。
希望有所帮助!
答案 1 :(得分:2)
MediaQuery.of(context).viewInsets
解决方案对我不起作用。即使键盘处于打开状态,它也始终显示zero
。此外,查看this answer中评论最高的评论,将其用作键盘指示器是一个坏主意。
因此,这是一个单行解决方案:
final viewInsets = EdgeInsets.fromWindowPadding(WidgetsBinding.instance.window.viewInsets,WidgetsBinding.instance.window.devicePixelRatio);
然后做任何您想做的事(例如viewInsets.bottom
是键盘高度):)
答案 2 :(得分:1)
在复杂的小部件树中,MediaQuery.of(context).viewInsets.bottom
会给出null
,即使键盘处于打开状态。因此,我们必须在树上变异值。
我制作了可在树https://pub.dev/packages/flutter_keyboard_size下提供所有所需信息的软件包
欢迎使用,如果您发现错误或想要扩展功能,请添加问题https://github.com/awaik/flutter_keyboard_size/issues
答案 3 :(得分:0)
答案 4 :(得分:0)
就我而言,什么都没有用,但是我需要没有键盘高度的屏幕高度,并且LayoutBuilder
可以完美工作。
LayoutBuilder(
builder: (context, constraints) => Container(
//maxHeight will change depending on your keyboard visible or not
height:constraints.maxHeight,
),
);
理论上您可以做到
LayoutBuilder(
builder: (context, constraints) {
double keyboardHeight = MediaQuery.of(context).size.height - constrains.maxHeight;
}
);