如何在Flutter 2.0.1中关闭TextFormfield的键盘?

3

嘿,我要怎样关闭键盘?我希望在点击区域外时可以关闭键盘。

  Widget build(BuildContext context) {
return Padding(
  padding: const EdgeInsets.fromLTRB(15, 0, 15, 0),
  child: TextFormField(
    keyboardType: TextInputType.number,
    maxLength: 10,
    controller: widget._phoneController,
    onTap: () => FocusScope.of(context).unfocus(),
    inputFormatters: [
      //input type
      FilteringTextInputFormatter.allow(
        RegExp(r'[0-9]'),
      ),
    ],
    //how the text box is decorated
    decoration: buildInputDecoration(
        Icons.phone, 'Enter your 10 digit phone number'),
  ),
);
}

1
以下是一个可以帮助你的好答案:https://dev59.com/SFUK5IYBdhLWcg3wjwiY#54977554 - Rohan Kadkol
2
这个回答解决了你的问题吗?如何关闭屏幕键盘? - Stijn2210
2个回答

5
您可以将覆盖整个屏幕的父部件包装在能检测点击事件的小部件内。在 onClick 中,
FocusScope.of(context).unfocus()

FocusScope.of(context)获取当前聚焦的节点,.unfocus()将其失焦。

这样做是因为当单击TextFormField时,它会消耗该单击事件。因此,父部件的onClick不会被触发,失焦也就不会发生。

当我们在外部单击时,父部件会消耗该单击事件,因为它的任何子部件都没有消耗该事件。因此,父部件的onClick被触发。

下面是一个示例。您可以在DartPad上查看演示
(虽然最好在移动设备上运行,以便您可以看到屏幕键盘。)

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Hide keyboard in TextFormField when touched outside'),
      ),
      body: GestureDetector(
        onTap: () {
          print('Clicked outside');
          FocusScope.of(context).unfocus();
        },
        child: Container(
          color: Colors.white,
          child: Form(
            child: Column(
              children: [
                TextFormField(
                  onTap: () => print('Clicked TextFormField'),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

1
对我有用 :)
  TextField(
        onSubmitted: (value) async {
          FocusScope.of(context).unfocus();
        },
    })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接