我已使用Connectivity's Readme进行了有关检查互联网连接的基本检查。
@override
void initState() {
super.initState();
subscription = Connectivity()
.onConnectivityChanged
.listen((ConnectivityResult result) {
// Got a new connectivity status!
print("Check: $result");
});
}
@override
void dispose() {
print("Disposing Connection ...");
super.dispose();
subscription.cancel();
}
我没有对代码本身进行任何重大更改。但是,当我检查日志时,似乎每次连接发生更改时,应用都会两次调用函数onConnectivityChanged()
。
以下是日志:
Restarted application in 1,611ms.
I/flutter (17481): Check: ConnectivityResult.none
I/flutter (17481): Check: ConnectivityResult.mobile
I/flutter (17481): Check: ConnectivityResult.mobile
I/flutter (17481): Check: ConnectivityResult.none
I/flutter (17481): Check: ConnectivityResult.none
I/flutter (17481): Check: ConnectivityResult.wifi
I/flutter (17481): Check: ConnectivityResult.wifi
第一个结果是ConnectivityResult.none
,它只出现一次。因为应用程序在当前小部件加载时仅检查一次连接性。但是,在第一个(正确的)结果之后,所有结果都将获得两次,即使它们应该只出现一次。
这导致我的应用程序出现了一些复杂情况。每次看到连接更改时,都会向用户显示一个对话框,其中包含以下选项:
您处于离线状态
您正在移动网络上
但是由于检查以某种方式对连接更改运行了两次,所以我一直看到两个对话框。不仅如此,由于当我从上下文中弹出对话框时,该应用程序会再次加载并对initState()
进行检查,从而使对话框再次显示。除非手机使用WiFi且没有检查,否则它将继续进行。