Flutter-如何清除焦点上的文本字段

时间:2019-01-29 19:05:01

标签: dart flutter

如何从焦点集中的TextFormField删除所有文本?这在JavaScript中非常容易:onfocus="this.value=''";。我不想使用这样的按钮:

FlatButton(onPressed: () => _textFieldcontroller.clear(), ...)

1 个答案:

答案 0 :(得分:2)

您可以将FocusNodeStatefulWidget结合使用。

我们在类中保留FocusNode的对象:

FocusNode _focusNode;

在我们的TextFormField的构造函数中,我们将必须传递_focusNode作为参数:

TextFormField(focusNode: _focusNode, ...

现在,我们可以向FocusNode添加一个监听器,当TextFormField的焦点更新时,该监听器将始终被调用。在其中,我们可以检查FocusNode是否具有重点,并据此采取行动。

_focusNode.addListener(() {
  if (_focusNode.hasFocus) _textFieldController.clear();
});

在小部件中:

class ExampleWidget extends StatefulWidget {
  @override
  _ExampleWidgetState createState() => _ExampleWidgetState();
}

class _ExampleWidgetState extends State<ExampleWidget> {
  FocusNode _focusNode;
  TextEditingController _textFieldController;

  @override
  void initState() {
    _focusNode = FocusNode();
    _focusNode.addListener(() {
      if (_focusNode.hasFocus) _textFieldController.clear();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) => TextFormField(focusNode: _focusNode, controller: _textFieldController, ...);
}