我有一个 TextField,它有一个控制器,它有一个更改监听器。像这样:
final TextEditingController _oneController = TextEditingController();
Run Code Online (Sandbox Code Playgroud)
@override
void initState() {
super.initState();
_oneController.addListener(_listener);
}
Run Code Online (Sandbox Code Playgroud)
TextField(
controller: _oneController,
),
Run Code Online (Sandbox Code Playgroud)
哪里_listener是一个函数,它将调度我的表单已被编辑的事件。
这工作正常,但只要您关注 TextField,它就会触发此侦听器运行,即使未对字段中的文本进行任何更改。
当 TextField 进入焦点时,有没有办法阻止我的听众被调用?当我的 TextField 中的文本没有更改时,我不希望我的侦听器被调用。
小智 6
将先前键入的文本存储在名为 prev 的变量中。(最初是 prev = "")。每次 _listener 被调用时,检查 _oneController.text == prev 是否相同,如果它们相同,则无需调用该函数。如果 prev 与文本不同,则执行函数 _listener。
_listener(){
if(prev != _oneController.text){
prev = _oneController.text;
//your rest of the code, whatever u wanna do.
}
}
Run Code Online (Sandbox Code Playgroud)