Flutter- TextEditingController侦听器多次调用文本字段

时间:2019-08-21 18:31:12

标签: flutter

在按下清除按钮后,多次调用

TextField控制的 controller.addListener(()),只会发生这种情况。

代码段:

TextEditingController controller = new TextEditingController();
    TextField field = new TextField(
      controller: controller,
      autofocus: true,

    );
    controller.addListener(() {
      print("Pressed cancel button");
    });

视频 Link

注意:在TextField中添加字符时,侦听器方法只会被调用。

3 个答案:

答案 0 :(得分:1)

在与API级别23和像素与API 25一起使用时,Nexus 6p也存在相同的问题。

但是使用API​​28的Pixel不会发生此问题,使用API​​26的Nexus6P不会发生此问题。

使用了https://flutter.dev/docs/cookbook/forms/text-field-changes中的精确代码。

答案 1 :(得分:0)

我想这可能是抖动的缺陷,可能的解决方案是使用 onChanged()

TextField field = new TextField(
  autofocus: true,
  onChanged: (String value) {
    print("Pressed clear button");
  },

);

答案 2 :(得分:-1)

1。我们需要创建自己的.clear()方法

quarter

2。我们需要仔细处理更改

void clearField() {
  print("c: clearField");
  var newValue = textController.value.copyWith(
    text: '',
    selection: TextSelection.collapsed(offset: 0),
  );
  textController.value = newValue;
  callApi('');
}

// and call it by : 

child: TextField(
  controller: textController,
  autofocus: true,
  decoration: InputDecoration(
    suffixIcon: IconButton(
      icon: Icon(Icons.close),
      onPressed: clearField, // call
    ),
  ),
),

完整代码

您可以查看此存储库并在本地构建它Github

结果

enter image description here