未检测到键盘。MediaQuery.of(context).viewInsets.bottom 总是返回 0.0

Dan*_*anG 9 android dart flutter flutter-layout

我有一个脚手架,里面有一个 TextField。当键盘之前将字段移动到键盘上方时,它总是覆盖这个字段。这发生在我项目的所有页面上。

我已将 MediaQuery.of(context).viewInsets.bottom 添加到我的构建方法中,它始终返回 0.0。当键盘出现时,没有重建。我已经尝试将 resizeToAvoidBottomInset 设置为 true 和 false 而没有任何更改。我试过将它包装在一个 Scrollable 小部件中,没有改变。

在 IOS 中一切正常,这仅影响 android 构建。

Doctor summary (to see all details, run flutter doctor -v):  
[?] Flutter (Channel unknown, v1.10.15, on Mac OS X 10.15.1 19B88, locale en-US)  

[?] Android toolchain - develop for Android devices (Android SDK version 29.0.2)  
[?] Xcode - develop for iOS and macOS (Xcode 11.2.1)  
[?] Android Studio  
[?] Android Studio (version 3.5)  
[?] VS Code (version 1.40.2)  
[?] Connected device (1 available)
Run Code Online (Sandbox Code Playgroud)

小智 9

我找到了这个问题的原因,但不知道为什么。当控件在Scaffold中时,键盘的出现和消失不会在Scaffold中重建body。可以尝试用Material替换Scaffold来观察。如果您不想替换 Scaffold,我可以找到的一种方法是:

\n
final bottom= EdgeInsets.fromWindowPadding(\n    WidgetsBinding.instance.window.viewInsets,\n    WidgetsBinding.instance.window.devicePixelRatio).bottom;\n
Run Code Online (Sandbox Code Playgroud)\n


Gab*_*iel 8

我最近遇到了这个问题。你有全屏设置为true吗?如果启用全屏,MediaQuery.viewInsets.bottom 将返回 0.0。由于您提到该问题仅发生在 android 中,因此您可以在本机 android 文件中设置 fullscreen 属性。检查styles.xml

    <item name="android:windowFullscreen">false</item>
Run Code Online (Sandbox Code Playgroud)

从应用程序中删除全屏的其他方法是SystemChrome.setEnabledSystemUIOverlays([])在颤振页面中。

您可能还想检查的另一件事是resizeToAvoidBottomPadding:在 Scaffold 中设置为 false。

该问题也已在 Flutter 问题中提出:https : //github.com/flutter/flutter/issues/25050