2

我有一个表单页面,并且有几个 TextFields,我想在单击一个特定文本字段之外调用一个函数。是否有任何 TextField 参数可以满足我的目的或以任何方式做到这一点?

4

2 回答 2

1

TextFormField 有 focusNode 属性,focusNode 有 addListener 回调。当 TextFormField 具有焦点和 textformfield 失去焦点时调用它,在 focusnode 的帮助下,我们可以在单击特定文本字段外部时调用方法。

class _MyWidgetState extends State<MyWidget> {
  FocusNode firstFocusNode = FocusNode();
  FocusNode secondFocusNode = FocusNode();

  @override
  void initState() {
    super.initState();
    firstFocusNode.addListener(() {
      if (!firstFocusNode.hasFocus) {
        method();
      }
    });
  }

  void method() {
    print("User clicked outside the Text Form Field");
  }

  @override
  void dispose()
  {
    firstFocusNode.removeListener((){});
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Column(children: [
      TextFormField(focusNode: firstFocusNode),
      TextFormField(
        focusNode: secondFocusNode,
      )
    ]));
  }
}
于 2022-01-16T14:18:54.650 回答
1

您正在寻找的解决方案是gestureDetector,但如果您只想在表单区域内但在文本字段外点击时调用该函数,则它取决于您要调用该函数的位置,然后用手势检测器包装表单并使用onTap:() {},或者如果您想在整个屏幕上点击但在文本字段之外调用相同的内容,请将其包裹在整个脚手架上。

new Scaffold(
body: new GestureDetector(
onTap: () {
FocusScope.of(context).requestFocus(new FocusNode());
//this function will remove the keyboard.
},
于 2022-01-16T07:53:55.197 回答