Flutter: как использовать .addListener TextEditingController

#flutter

#flutter

Вопрос:

я создаю простое приложение, которое печатает результат текущего TextFormField . Например, когда текст изменяется, он печатает новое значение.

Я узнал, что вы можете добиться этого с TextEditingController.addListener помощью этого, который прослушивает изменения и выполняет функцию.

Итак, я завернул все это в initState следующим образом

 @override
  void initState() {
      addressController.addListener(() {
        print(addressController.text);
      });  

Проблема, с которой я сталкиваюсь, заключается в том, что иногда он записывает изменения, даже если их нет:

Это то, что происходит при написании слова, а затем его удалении.

введите код здесь

Комментарии:

1. Есть ли у вас .removeListener в коде?

2. ehm … где я должен его иметь?

Ответ №1:

Если вы добавляете слушателя, вам следует его где-нибудь удалить, иначе может возникнуть ситуация, когда у TextEditingController будет 2 или более слушателей:

 @override
void initState() {
    addressController.addListener(_addressControllerListener); 
    super.initState() 
}

void _addressControllerListener() {    
    print(addressController.text); 
}

@override 
void dispose() { 
   addressController.removeListener(_addressControllerListener); 
   super.dispose() 
}
  

Комментарии:

1. очень любопытно! благодаря share. dispose — это самое крутое.