Flutter TextEditingController Слушатель вызывается слишком много раз - PullRequest
0 голосов
/ 24 мая 2018

Хорошо, у меня есть один экран с текстовым полем, в котором есть textEditingController, со слушателем, который добавляется один раз в состояние инициализации.Функция слушателя открывает новый экран, а затем, когда я открываю этот экран, функция слушателя вызывается немедленно снова, если я не удаляю слушателя сразу после нажатия на Экран.Мне нужно либо выяснить, как предотвратить вызов функции слушателя, либо отличить, какие вызовы функции слушателя выполняются не только от нажатия пользователем текстового поля.Я предполагаю, что второй вариант - это то, что правильно, но я довольно новичок, чтобы трепетать, поэтому я не знаю, как это сделать.Спасибо вам, ребята !!

Вот базовый обзор моего кода ....

ЭКРАН 1

class SubmitPost extends StatefulWidget{

  _submitPostState createState() => new _submitPostState();

}



class _submitPostState extends State<SubmitPost>{

final originTextContoller = new TextEditingController();

 void initState() {
    super.initState();

originTextContoller.addListener(_onOriginTouch);



   }


_onOriginTouch() {


    // my guess is that I need some type of conditional statement to determine wheter or not this function was triggered by the user or the "notifyAllListeners" function which is getting called for some reason. I think that's what's happening but idk...



    Navigator.push(context, new MaterialPageRoute(builder: (context) => new PlacePicker()));


}



  @override
  void dispose() {
    // Clean up the controller when the Widget is removed from the Widget tree

     originTextContoller.removeListener(_onOriginTouch);
    originTextContoller.dispose();

    super.dispose();
  }


}

ЭКРАН 2

class PlacePicker extends StatefulWidget {

   @override
  _PickerState createState() => new _PickerState();
}

class _PickerState extends State<PlacePicker> {

 // basically just a list view with on tap meathod below



    onTap: () async {  // async needed for separate function not called now

      Navigator.pop(context);

}



}
...