Flutter TextFormField被键盘隐藏

时间:2018-12-03 02:58:59

标签: dart flutter flutter-layout

注意:我正在使用Navigator.of(context).push推送ModalRoute,

您好,我的页面上有ModalRoute,正文中有TextFormField,但是当键盘显示时,输入正被键盘隐藏,该如何解决?

enter image description here

return Container(
      child: ListView(
          children: <Widget>[
            //other widget
            SizedBox(height: _qtyAnimation.value),
            Row(
              children: <Widget>[
                Expanded(
                  child: Text(
                    "Jumlah",
                    style: TextStyle(fontWeight: FontWeight.bold),
                  ),
                ),
                SizedBox(
                  width: 145.0,
                  child: TextFormField(
                    focusNode: _qtyFocusNode,
                    controller: qty,
                    keyboardType: TextInputType.number,
                    textAlign: TextAlign.center,
                    decoration: InputDecoration(
                      contentPadding: EdgeInsets.all(0.0),
                      prefixIcon: IconButton(
                        icon: Icon(Icons.remove),
                        onPressed: () {},
                      ),
                      border: OutlineInputBorder(
                        borderSide:
                            BorderSide(color: Colors.grey, width: 0.1),
                      ),
                      suffixIcon: IconButton(
                        icon: Icon(Icons.add),
                        onPressed: () {},
                      ),
                    ),
                  ),
                ),
              ],
            ),
          ],
    );

多数民众赞成在我的代码,我尝试与focusnode和更多,仍然相同的结果 请帮助我

10 个答案:

答案 0 :(得分:9)

您需要将所有内容包装在 SingleChildScrollView 中,并将 reverse 设置为 true。

SingleChildScrollView(
   reverse: true,
   child: Container(),
);

这对我有用!

答案 1 :(得分:7)

我有类似的问题。我尝试了所有解决方案,但是没有用。 最后,我删除了

<item name="android:windowFullscreen">true</item>

从android文件夹中的styles.xml文件中修复该问题。

答案 2 :(得分:5)

这对我有用...

首先添加此

final bottom = MediaQuery.of(context).viewInsets.bottom;

然后使用SingleChildScrollView()环绕主窗口小部件(无论您使用的是什么,例如Column,ListView等)……

您需要“ reverse:true”

Widget build{
return Scaffold(
body: SingleChildScrollView(
reverse: true;
child: Container(...

您还需要脚手架的这两行代码。.

return Scaffold(
resizeToAvoidBottomInset: false,
resizeToAvoidBottomPadding: false,
body: SingleChildScrollView(...

最后,为您的EdgeInsets引用“底部”。

body: SingleChildScrollView(
reverse: true,
child: Padding(
padding: EdgeInsets.only(bottom: bottom),
child: Container(...

答案 3 :(得分:3)

resizeToAvoidBottomInset小部件中将false设置为Scaffold

请注意,resizeToAvoidBottomPadding将被弃用。

Scaffold( resizeToAvoidBottomInset: false, ...)

答案 4 :(得分:2)

感谢您使用文本字段底部的填充来解决我的问题

Padding(
              padding: EdgeInsets.only(
                  bottom: MediaQuery.of(context).viewInsets.bottom)

和母马反向列表

答案 5 :(得分:2)

也添加到这里普遍接受的答案

body: SingleChildScrollView(
          reverse: true,
          child: Container(
              child: Padding(
            padding: EdgeInsets.only(bottom: bottom),
            child: Stack(
              fit: StackFit.loose,
              children: <Widget>[

我在底部插图中添加了一个东西,以防止它变得太高。

    var bottom = MediaQuery.of(context).viewInsets.bottom;
bottom = max(min(bottom, 80), 0);

答案 6 :(得分:1)

(现在)有几种方法:

您可以阅读以下内容以获得更好的解决方案:When i select a Textfield the keyboard moves over it

Scafold()内添加:resizeToAvoidBottomPadding: false,

也可以,

SingleChildScrollView()包装TextWidget。这将使您可以灵活地在键盘出现时进行滚动。

答案 7 :(得分:1)

对我有用的是将文档与此处的提示结合在一起。它使用LayoutBuilder,SingleChildScrollView,填充(带有底部hack),最后使用ConstrainedBox(以使用Expanded)。通过将它们结合使用,它可以与Columns中的Expanded窗口小部件一起使用。

文档(来自LayoutBuilder的文档): https://api.flutter.dev/flutter/widgets/SingleChildScrollView-class.html

结构

 return Scaffold(
      resizeToAvoidBottomInset: false,
      resizeToAvoidBottomPadding: false,`
body: SafeArea(
        child: Container(
          child: LayoutBuilder(builder:
              (BuildContext context, BoxConstraints viewportConstraints) {
            return SingleChildScrollView(
              reverse: true,
              child: Padding(
                padding: EdgeInsets.only(bottom: bottom),
                child: ConstrainedBox(
                  constraints: BoxConstraints(
                      minHeight: viewportConstraints.maxHeight,
                      maxHeight: viewportConstraints.maxHeight),
                  child: Column(

答案 8 :(得分:1)

我在modal_bottom_sheet插件中使用表单元素。我通过将以下代码添加到SingleChildScrollView来解决了该问题。

padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom)

答案 9 :(得分:0)

就我而言,仅使用小填充很重要,否则打开键盘时会弄得一团糟。

  buildTabBarContent() {
    return TabBar(
      isScrollable: true,
      labelColor: Colors.black,
      indicator: DotIndicator(
        color: Colors.black,
        distanceFromCenter: 16,
        radius: 3,
        paintingStyle: PaintingStyle.fill,
      ),
      tabs: [
        Tab(
          text: "All",
        ),
        Tab(text: "Football"),
        Tab(
          text: "Tennis",
        ),
        Tab(text: "Basketball"),
        Tab(text: "Cricket"),
        Tab(text: "Cricket"),
        Tab(text: "Cricket"),
      ],
    );
  }

检查我的解决方案:

Padding(padding: EdgeInsets.only(bottom: 20)