Android TextField controller.addListener(()在使用controller.clear后被多次调用

Android TextField controller.addListener(()在使用controller.clear后被多次调用,android,flutter,authentication,Android,Flutter,Authentication,TextEditingController的方法addListener()在执行clear()方法后被多次调用,只有在清除该方法时才会发生这种情况 TextEditingController _pinPutController = TextEditingController(); @override void initState() { _pinPutController.addListener(() { if (_pinPutController.text.leng

TextEditingController的方法
addListener()
在执行
clear()
方法后被多次调用,只有在清除该方法时才会发生这种情况

TextEditingController _pinPutController = TextEditingController();
  @override
  void initState() {
    _pinPutController.addListener(() {
      if (_pinPutController.text.length > 4) {
          print("Hello world");
          _pinPutController.clear();
      }
  });
} 
当if语句中的条件为true时,主体将执行两次

有人能帮我解决这个问题吗

bool isClear = false;

TextField(
  controller: _pinPutController,
  decoration: InputDecoration(
    hintText: "Enter a message",
    suffixIcon: IconButton(
      onPressed: () => (isClear)?_pinPutController.clear(): null,
      icon: Icon(Icons.clear),
    ),
  ),
)
通过向其中添加
isClear
来更改您编写的代码

TextEditingController _pinPutController = TextEditingController();
  @override
  void initState() {
    _pinPutController.addListener(() {
      if (_pinPutController.text.length > 4) {
          setState(() {
            isClear = true;
          });
      }
  });
}

不要在initstate内进行检查,您只将控制器传递给它,但我创建了一个方法并在addListener内传递了该方法,但我有相同的结果@tryharder此实现在工作时按on按钮,但我希望当此条件(_pinPutController.text.length>4)为真时清除textfild automatic