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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
Flutter 如何取消在主功能中打开的StreamSubscription_Flutter_Dart - Fatal编程技术网

Flutter 如何取消在主功能中打开的StreamSubscription

Flutter 如何取消在主功能中打开的StreamSubscription,flutter,dart,Flutter,Dart,我不确定我在这方面的做法是否正确。我想使用connectivity package()收听连接更改 但我不想听到特定屏幕/小部件上的连接更改。相反,我希望应用程序能够全局监听连接变化,并在连接恢复在线时同步数据 我的第一个方法是 var StreamSubscription subscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) { // Got a new connectivi

我不确定我在这方面的做法是否正确。我想使用connectivity package()收听连接更改

但我不想听到特定屏幕/小部件上的连接更改。相反,我希望应用程序能够全局监听连接变化,并在连接恢复在线时同步数据

我的第一个方法是

var StreamSubscription subscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
// Got a new connectivity status! })
在我的主要职能中。但是,我得到一个错误,提醒我需要取消已打开的订阅。如果在我的主函数中打开streamsubscription,我将如何做到这一点? 还是应该将订阅侦听器放在其他地方


非常感谢您的帮助

主功能可以调用runApp,显示应用程序的顶级。 创建新的颤振应用程序时-它被称为MyApp。我将以它为例

您可以做的是将MyApp更改为StatefulWidget。在此之后,您可以使用它的initState创建订阅,该订阅将一直持续到应用程序关闭

导入'dart:async';
进口“包装:颤振/材料.省道”;
导入“package:connectivity/connectivity.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了StatefulWidget{
@凌驾
State createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
//定义一个类变量来保存订阅
流媒体订阅;
@凌驾
void initState(){
super.initState();
//初始化订阅
subscription=Connectivity().onConnectivityChanged.listen((ConnectivityResult结果){
打印('获得新的连接状态!');
打印(result.toString());
});
}
@凌驾
无效处置(){
//删除类时取消订阅
订阅。取消();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
.....
);
}
}
另外,不要忘记总是取消对dispose类的任何订阅


希望这能有所帮助。

在所有状态更改(例如,当应用程序冻结并恢复时)都能正常工作吗?即使应用程序处于后台模式,它也会触发。您只需粘贴上面的代码,运行它,按下“主页”按钮并启用/禁用wifi连接。应用程序仍将向控制台输出连接更改。