【发布时间】:2018-08-22 11:38:55
【问题描述】:
有什么方法可以在 Flutter 中获得开放式键盘的高度?我正在尝试在打开时将bottomSheet 小部件填充到键盘的高度。
【问题讨论】:
有什么方法可以在 Flutter 中获得开放式键盘的高度?我正在尝试在打开时将bottomSheet 小部件填充到键盘的高度。
【问题讨论】:
通常viewInsets 提供有关任何系统 ui 的数据,这些数据会掩盖 Flutter ui。要了解键盘高度,您可以检查viewInsets 的bottom 属性,当键盘在屏幕上时,它将保持键盘高度,否则为零。
您可以使用MediaQuery 来检查viewInsets,例如:
MediaQuery.of(context).viewInsets.bottom
注意:bottom 属性可能具有值,即使某些其他系统 ui 从底部遮挡了颤振 ui。
希望有帮助!
【讨论】:
如果是复杂的小部件树MediaQuery.of(context).viewInsets.bottom 会给出null,即使键盘打开也是如此。所以,我们必须在树下改变值。
我制作的包提供了所有需要的信息https://pub.dev/packages/flutter_keyboard_size
欢迎使用,如果您发现错误或想要扩展功能,请添加问题https://github.com/awaik/flutter_keyboard_size/issues
【讨论】:
【讨论】:
在我的情况下,没有任何效果,但我需要没有键盘高度的屏幕高度和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;
}
);
【讨论】:
MediaQuery.of(context).viewInsets 解决方案对我不起作用。即使键盘打开,它也总是显示zero。此外,查看this answer 中获得最高评价的评论,将其用作键盘指示器是个坏主意。
因此,这是一种单行解决方案:
final viewInsets = EdgeInsets.fromWindowPadding(WidgetsBinding.instance.window.viewInsets,WidgetsBinding.instance.window.devicePixelRatio);
然后做任何你想做的事(例如viewInsets.bottom是键盘高度):)
【讨论】:
如果您需要在键盘未打开的情况下获取键盘高度,您可以使用flutter_persistent_keyboard_height 包(注意:它是我创建的)。
您需要做的第一件事是使用PersistentKeyboardHeightProvider 从您想要获取键盘高度的子级中包装一个小部件。如果您想从所有小部件中获取键盘高度,请包装您的应用小部件(可能是 MaterialApp)。
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const PersistentKeyboardHeightProvider(
child: MaterialApp(
title: 'Flutter Persistent Keyboard Height Example',
home: PersistentKeyboardHeightExample(),
),
);
}
}
然后您可以使用PersistentKeyboardHeight.of(context).keyboardHeight 来获取高度。
【讨论】:
如果 MediaQuery.of(context).viewInsets.bottom 显示 0.0,这应该可以:
首先,进入您的Scaffold 并设置:
resizeToAvoidBottomInset: false,
那么你可以这样检查键盘的高度:
MediaQuery.of(context).viewInsets.bottom,
【讨论】: