在 Flutter 中显示在键盘上方的按钮

Posted

技术标签:

【中文标题】在 Flutter 中显示在键盘上方的按钮【英文标题】:Button to appear above the keyboard in Flutter 【发布时间】:2021-11-22 09:18:36 【问题描述】:

我有一个布局,登录按钮位于屏幕底部,TextFormField 位于屏幕顶部。我有一个问题,我想在它出现时显示键盘上方的按钮,但我很难做到这一点。我想要一个干净的解决方案,而不是一些 hack,但似乎找不到。是否正在使用floatingActionButtonbottomNavigationBar 解决方案并使用MediaQuery.of(context).viewInsets.bottom?这是代码和图片。

我有这个屏幕视图:

但是当键盘出现时我看不到登录按钮:

我想在键盘出现后将按钮放在密码TexFormField 的正下方。 是否有某种简单的解决方案,但没有解决这个问题? 代码如下:

Scaffold(
            resizeToAvoidBottomInset: false, // <- here I set this to false so my whole widget doesn't resize when the keyboard appears
            backgroundColor: Colors.white,
            body: Column(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: <Widget>[
                Column(
                  children: [
                    SizedBox(
                      height: 48.0,
                    ),
                    Padding(
                      padding: const EdgeInsets.only(left: 24.0, right: 25.0),
                      child: Form(
                        key: _loginFormKey,
                        child: Column(
                          children: [
                            TextFormField(
                              onChanged: (value) 
                                setState(() => email = value);
                              ,
                            ),
                            SizedBox(
                              height: 24.0,
                            ),
                            TextFormField(
                              onChanged: (value) 
                                setState(() => password = value);
                              ,
                            ),
                          ],
                        ),
                      ),
                    ),
                  ],
                ),
                Padding(
                  padding: const EdgeInsets.only(
                      left: 23.0, right: 24, bottom: 64.0),
                  child: SizedBox(
                    width: double.infinity,
                    child: PrimaryButton(
                      buttonText: 'LOG IN',
                    ),
                  ),
                ),
              ],
            ),
          );

提前感谢您的帮助!

【问题讨论】:

您应该使用 Stack 小部件并将包含字段和按钮的 Column 放在其中。 【参考方案1】:

在您的代码中,您必须避免 resizeToAvoidBottomInset: false 使您的按钮不可见,是的,我明白了,您需要在编辑文本和按钮之间留出空间,这就是您将 Colum 添加为父项的原因。但是还有另一种更好的方法来实现这一点,yes 按钮将按照您的预期显示在下面的代码中。

Scaffold(
      backgroundColor: Colors.white,
      body:

           Stack(
          children: [
            Padding(
              padding: const EdgeInsets.only(left: 24.0, right: 25.0),
              child: Form(
                child: Column(
                  children: [
                    TextFormField(
                      onChanged: (value) ,
                    ),
                    SizedBox(
                      height: 24.0,
                    ),
                    TextFormField(
                      onChanged: (value) ,
                    ),
                  ],
                ),
              ),
            ),
            Align(
              alignment: Alignment.bottomCenter,
              child: Padding(
                padding:
                    const EdgeInsets.only(left: 23.0, right: 24, bottom: 64.0),
                child: SizedBox(
                    width: double.infinity,
                    child: ElevatedButton(
                      child: Text("Button"),
                      onPressed: () ,
                    )),
              ),
            ),
          ],
        )
    );

【讨论】:

【参考方案2】:

你能把 Singlechildscrollview 小部件包裹在 body 的 Column 上吗?

【讨论】:

以上是关于在 Flutter 中显示在键盘上方的按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 的键盘上显示容器上方

如何制作像生物编辑器一样的 Tinder - Flutter

android中TextView在界面显示的时候,我想在键盘显示的上方加两个按钮,一个是确定,一个是取消.

inputAccessoryView 未显示在键盘上方

工具栏不会显示在键盘上方

在 Flutter 中包裹 Material App 时,键盘“完成”不显示