【发布时间】: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