Android 连接包';正在多次调用s onConnectionChanged()

Android 连接包';正在多次调用s onConnectionChanged(),android,flutter,dart,connectivity,Android,Flutter,Dart,Connectivity,我已使用on check internet connectivity设置了一个基本检查 @override void initState() { super.initState(); subscription = Connectivity() .onConnectivityChanged .listen((ConnectivityResult result) { // Got a new connectivity status!

我已使用on check internet connectivity设置了一个基本检查

@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上,没有任何检查。

我只保存以前的状态,如果新事件是针对未更改的状态,则忽略它。但正如您所看到的,代码已经调用了两次
initState()
。这是正常的行为吗?我应该在Flatter的github中添加一个bug报告吗?连接状态是应用程序范围的,所以你应该在你的material应用程序状态中立即订阅它,或者最高提供商或继承的widget.will就可以了。谢谢你找到解决办法了吗?我也面临着这个问题。我的函数被多次调用。