我有一个带有TextField的脚手架。以前,键盘会将字段移到键盘上方时,它始终会覆盖该字段。这发生在我项目的所有页面上。
我已经将MediaQuery.of(context).viewInsets.bottom添加到我的构建方法中,并且始终返回0.0。键盘抬起时,不会重建。我尝试将resizeToAvoidBottomInset设置为true和false,而没有进行任何更改。我尝试将其包装在Scrollable小部件中,保持不变。
在IOS上一切正常,这只会影响android构建。
overall.drop('YTD2017',axis=1,level = 1 ,inplace = True)
答案 0 :(得分:2)
我最近遇到了这个问题。您是否将全屏设置为true?如果启用了全屏,MediaQuery.viewInsets.bottom将返回0.0。由于您提到的问题仅在android中发生,因此有可能在本机android文件中设置了全屏属性。检查styles.xml
<item name="android:windowFullscreen">false</item>
从应用中删除全屏的另一种方法是在颤动页面中SystemChrome.setEnabledSystemUIOverlays([])
。
您可能还要检查的另一件事是resizeToAvoidBottomPadding:
在脚手架中为假。
在Flutter问题中也提出了该问题:https://github.com/flutter/flutter/issues/25050
答案 1 :(得分:0)
在复杂的小部件树的情况下,即使键盘处于打开状态,MediaQuery.of(context).viewInsets.bottom仍为null。因此,我们必须在树上变异值。
此软件包提供了易于使用的提供程序,用于从树https://pub.dev/packages/flutter_keyboard_size处获取信息
或者,您可以自行改变有关键盘大小的信息(可以在包中查找代码)。
答案 2 :(得分:0)
打开键盘后,MediaQuery.of(context).viewInsets.bottom会更改以反映新的底部(现在位于键盘顶部)。
但是,Android应用可能处于全屏状态:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:windowFullscreen">true</item>
</style>
<color name="xxx">#FFFF00</color>
</resources>
在这种情况下,即使键盘处于打开状态,viewInsets.bottom
也将始终为0.0
答案 3 :(得分:0)
我找到了这个问题的原因,但我不知道为什么。当控件在 Scaffold 中时,键盘的出现和消失不会在 Scaffold 中重建 body。可以尝试用Material代替Scaffold来观察。如果您不想更换 Scaffold,我能找到的一种方法是:
final bottom= EdgeInsets.fromWindowPadding(
WidgetsBinding.instance.window.viewInsets,
WidgetsBinding.instance.window.devicePixelRatio).bottom;