连接包的onConnectionChanged()被多次调用

时间:2019-11-21 08:24:41

标签: android flutter dart connectivity

我已使用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且没有检查,否则它将继续进行。

0 个答案:

没有答案