【问题标题】:Flutter TextEditingController Listener called too many timesFlutter TextEditingController Listener 调用次数过多
【发布时间】:2018-05-24 02:03:57
【问题描述】:

好的,所以我有一个带有文本字段的屏幕,它有一个 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);

}



}

【问题讨论】:

  • 您要解决的实际问题是什么?在 TextEditingController 事件上打开一个新屏幕似乎很奇怪。
  • 好吧,我想了解为什么会这样,因为我能够迅速实现这一点。弹出后文本获取发送回屏幕 1,因此我可以更新文本字段上的文本.....或者,我可以使用按钮并将文本添加到按钮,但我觉得可以学到一些东西在这里这可能对未来有益,所以我想了解为什么会发生这种情况。

标签: android ios dart textfield flutter


【解决方案1】:

TextField 的 eventListener 被触发的原因是因为它专注于弹出第二个屏幕以返回第一个屏幕。您可能需要考虑将 Navigator 放在 Button 而不是 Listenber 上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2015-03-15
    相关资源
    最近更新 更多