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

标签 dart flutter

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

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

最佳答案

您可以使用 FocusNode结合 StatefulWidget

我们在我们的类中保留了一个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, ...);
}

关于dart - Flutter - 如何清除焦点上的文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54428029/

相关文章:

flutter - 如何使用ByteArrayOutputStream和ByteBuffer

flutter - 根据TabBarView的事件 View 显示不同的晶圆厂

sqlite - 如何访问 initstate 中的 future 值?

flutter - HiveError (HiveError : Cannot write, unknown type : Slug. Did you forget to register an adapter?)

flutter - Github 操作 Flutter CI 错误 : No version of NDK matched

Flutter 创建一个凸起的按钮

flutter - 使用 Obx,出现此错误 : [Get] the improper use of a GetX has been detected

versioning - 在 Dart with Pub 中,我什么时候应该对依赖项使用 "any"版本约束?

flutter - 如何在泛型 Dart 方法中对泛型类型 T 实现实现约束?

json - 尝试加载JSON凭证时找不到 Assets :assets/credentials.json错误或文件的变体