Android 颤振-如何在侦听器中检查延迟后的值?
这是我的密码:Android 颤振-如何在侦听器中检查延迟后的值?,android,flutter,dart,Android,Flutter,Dart,这是我的密码: networkConnectivity.listen((value) async { print("Before: $value"); await Future.delayed(const Duration(seconds: 5)); print("Later: $value"); if (!value) { ... } else { ..
networkConnectivity.listen((value) async {
print("Before: $value");
await Future.delayed(const Duration(seconds: 5));
print("Later: $value");
if (!value) {
...
} else {
..
}
});
假设侦听器在没有internet时被触发,并且之前的
值为false
。但即使之前的
值在5秒内已更改为真
,之后的
仍然为假
为什么在这种情况下我得不到更新的值?解决方法是什么?除非有什么改变,否则变量的值不会改变。在您提供的代码中,两次打印之间的“value”值没有任何变化
据推测,当连接发生变化时,代码块将再次运行,并且“value”变量中有一个新值。除非有什么改变,否则变量的值不会改变。在您提供的代码中,两次打印之间的“value”值没有任何变化
据推测,当连接发生变化时,您的代码块将再次运行,“value”变量中有一个新值。根据您最新的响应,您希望在侦听器调用提供的回调时显示一个对话框,但返回值为false(无连接)并且在5秒内不会使用值true调用回调,以下方法可能是您想要的:
定时器无连接定时器;
...
networkConnectivity.listen((值)异步{
如果(!value&&(noconnectivitymer==null | | |!noconnectivitymer.isActive)){
NoConnectionTimer=计时器(持续时间(秒数:5),()=>showDialog(…);
}否则{
NoConnectionTimer?.cancel();
...
}
},
);
我所做的:利用
定时器
类,在该类中我可以定义持续时间
,一旦达到给定的持续时间,就会调用回调(定义在后面),我们将在那里显示对话框。但是,如果我们的侦听器回调得到的值为true,表示我们再次建立了连接,我们希望取消任何正在运行的计时器
,因此只有当我们最初收到一个false值,并且在5秒内没有true值时,才会显示该对话框。您可能需要在应用程序中编辑它,这只是一个示例 根据您的最新响应,您希望在侦听器调用提供的回调时显示一个对话框,该回调为false(无连接),并且在5秒内不会使用true值调用该回调,以下方法可能是您想要的:
定时器无连接定时器;
...
networkConnectivity.listen((值)异步{
如果(!value&&(noconnectivitymer==null | | |!noconnectivitymer.isActive)){
NoConnectionTimer=计时器(持续时间(秒数:5),()=>showDialog(…);
}否则{
NoConnectionTimer?.cancel();
...
}
},
);
我所做的:利用
定时器
类,在该类中我可以定义持续时间
,一旦达到给定的持续时间,就会调用回调(定义在后面),我们将在那里显示对话框。但是,如果我们的侦听器回调得到的值为true,表示我们再次建立了连接,我们希望取消任何正在运行的计时器
,因此只有当我们最初收到一个false值,并且在5秒内没有true值时,才会显示该对话框。您可能需要在应用程序中编辑它,这只是一个示例 您提供给listen函数的回调:(value)async。。。将在networkConnectivity每次决定通知其侦听器时被调用。您不必在其中放置某种延迟,延迟位于同一侦听器回调实例中,并且将具有相同的值。不知道networkConnectivity实例来自何处,我无法告诉您确切的问题是什么!哦,是的,我完全误解了你想要的@kounex回答/评论是您想要的我想要做的是,如果连接不可用超过5秒,我想显示一个对话框。因此延迟@调用您提供给listen函数的回调:(value)async。。。将在networkConnectivity每次决定通知其侦听器时被调用。您不必在其中放置某种延迟,延迟位于同一侦听器回调实例中,并且将具有相同的值。不知道networkConnectivity实例来自何处,我无法告诉您确切的问题是什么!哦,是的,我完全误解了你想要的@kounex回答/评论是您想要的我想要做的是,如果连接不可用超过5秒,我想显示一个对话框。因此延迟@我没有得到的是,为什么最后一个Before值是true
,后来又是false
。我想做的是,如果连接不可用超过5秒,我想显示一个对话框。因此延迟。我没有得到的是,为什么最后一个Before值是true
,然后是false
。我想做的是,如果连接不可用超过5秒,我想显示一个对话框。因此延迟。