Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 颤振-如何在侦听器中检查延迟后的值?_Android_Flutter_Dart - Fatal编程技术网

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秒,我想显示一个对话框。因此延迟。