在Flutter 项目中,我需要收听TextFormField中的输入文本并执行某些操作,特别是当用户输入某些字符(例如.空间),或者当他请求焦点时.当这种事件发生时,我需要修改字段的值. 我知道有called controller元,但我不知道在这种情况下怎么用.

提前谢谢你.

推荐答案

您可以指定控制器和焦点 node ,然后向它们添加侦听器以监视更改.

例如:

定义控制器和焦点 node

TextEditingController _controller = new TextEditingController();

FocusNode _textFocus = new FocusNode();

定义监听器函数

void onChange(){
  String text = _controller.text;
  bool hasFocus = _textFocus.hasFocus;
  //do your text transforming
  _controller.text = newText;
  _controller.selection = new TextSelection(
                                baseOffset: newText.length, 
                                extentOffset: newText.length
                          );
}

将Listner添加到控制器,并将焦点 node 设置为initState

// you can have different listner functions if you wish
_controller.addListener(onChange); 
_textFocus.addListener(onChange);

然后您可以将其用作

new TextFormField(
  controller: _controller,
  focusNode: _textFocus,
)

希望这会有帮助!

Dart相关问答推荐

从GTIN中提取GS1公司前缀

Dart:当两个或多个任务等待同一个 Future 时会发生什么

如何在 Flutter 的 firebase_database 中执行事务?

如何为屏幕设置不同的主题?

Flutter pod 安装问题 - # 的未定义方法 `each_child'

触发从小部件到状态对象的函数

Dart 1.8 中的异步/等待功能

InheritedWidget - 在 navigator.push 之后在 null 上调用 getter

如何在 Flutter 中更改 Html 小部件中的字体样式?

了解Dart private class

Flutter Text 小部件中的 StrutStyle 是什么

如何解决Id does not exist错误?

参数类型PointerEvent不能分配给参数类型PointerDownEvent

如何将 转换为 List

函数调用前的感叹号是什么意思?

如何在 Dart 中扁平化map列表?

如何在 Dart 中为 Completer.CompleteException(exception, stackTrace) 获取当前堆栈跟踪;

Dart 中如何将列表转换为map

如何在 Dart 中将日期/时间字符串转换为 DateTime 对象?

在 Dart 中克​​隆list列表、map或set集合