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

cub*_*Guy 7 dart flutter

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

FlatButton(onPressed: () => _textFieldcontroller.clear(), ...)
Run Code Online (Sandbox Code Playgroud)

cre*_*not 11

您可以FocusNodeStatefulWidget.

我们FocusNode在类中保留一个对象:

FocusNode _focusNode;
Run Code Online (Sandbox Code Playgroud)

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

TextFormField(focusNode: _focusNode, ...
Run Code Online (Sandbox Code Playgroud)

现在我们可以向我们添加一个监听器,FocusNode当我们的焦点TextFormField更新时,它总是会被调用。在里面,我们可以检查我们是否FocusNode有焦点,并根据它采取行动。

_focusNode.addListener(() {
  if (_focusNode.hasFocus) _textFieldController.clear();
});
Run Code Online (Sandbox Code Playgroud)

在小部件中:

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, ...);
}
Run Code Online (Sandbox Code Playgroud)