【问题标题】:Get keyboard height in Flutter在 Flutter 中获取键盘高度
【发布时间】:2018-08-22 11:38:55
【问题描述】:

有什么方法可以在 Flutter 中获得开放式键盘的高度?我正在尝试在打开时将bottomSheet 小部件填充到键盘的高度。

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    通常viewInsets 提供有关任何系统 ui 的数据,这些数据会掩盖 Flutter ui。要了解键盘高度,您可以检查viewInsetsbottom 属性,当键盘在屏幕上时,它将保持键盘高度,否则为零。

    您可以使用MediaQuery 来检查viewInsets,例如:

    MediaQuery.of(context).viewInsets.bottom
    

    注意:bottom 属性可能具有值,即使某些其他系统 ui 从底部遮挡了颤振 ui。

    希望有帮助!

    【讨论】:

    • 非常感谢您的回答,但是您知道键盘不在屏幕上时如何获取键盘高度吗?我发现当键盘不在屏幕上时,许多原生应用程序可以提前显示一个与键盘高度相同的容器。干杯。
    • @sgon00 是的,你是对的。你找到如何在键盘打开之前找到它的高度了吗?
    • 不适合我。非常感谢。
    【解决方案2】:

    如果是复杂的小部件树MediaQuery.of(context).viewInsets.bottom 会给出null,即使键盘打开也是如此。所以,我们必须在树下改变值。

    我制作的包提供了所有需要的信息https://pub.dev/packages/flutter_keyboard_size

    欢迎使用,如果您发现错误或想要扩展功能,请添加问题https://github.com/awaik/flutter_keyboard_size/issues

    【讨论】:

    • 不适合我。谢谢
    【解决方案3】:

    这对我有用: https://pub.dev/packages/keyboard_utils

    包中的示例代码:

    【讨论】:

      【解决方案4】:

      在我的情况下,没有任何效果,但我需要没有键盘高度的屏幕高度和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;
        }
      );
      

      【讨论】:

      • 什么是无约束布局,你会怎么处理?
      • 只要限制它。它旨在用于屏幕的更高小部件树级别。并且很容易让那些受设备高度限制。
      【解决方案5】:

      MediaQuery.of(context).viewInsets 解决方案对我不起作用。即使键盘打开,它也总是显示zero。此外,查看this answer 中获得最高评价的评论,将其用作键盘指示器是个坏主意。

      因此,这是一种单行解决方案:

      final viewInsets = EdgeInsets.fromWindowPadding(WidgetsBinding.instance.window.viewInsets,WidgetsBinding.instance.window.devicePixelRatio);
      

      然后做任何你想做的事(例如viewInsets.bottom是键盘高度):)

      【讨论】:

      • 如何在不打开键盘的情况下获得键盘高度。我的要求是打开一个表情符号框作为键盘高度的覆盖,它应该与键盘高度相同。有什么建议,请分享。谢谢。
      • @Kamlesh 好问题,我也想知道
      • 100% 这是使用的解决方案!当键盘为我打开时,其他解决方案偶尔会显示 0,非常不可靠。
      【解决方案6】:

      如果您需要在键盘未打开的情况下获取键盘高度,您可以使用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 来获取高度。

      【讨论】:

        【解决方案7】:

        如果 MediaQuery.of(context).viewInsets.bottom 显示 0.0,这应该可以:

        首先,进入您的Scaffold 并设置:

        resizeToAvoidBottomInset: false,
        

        那么你可以这样检查键盘的高度:

        MediaQuery.of(context).viewInsets.bottom,
        

        【讨论】:

          猜你喜欢
          • 2015-05-06
          • 2016-04-25
          • 2014-11-24
          • 1970-01-01
          • 1970-01-01
          • 2015-12-04
          • 2019-04-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多