流订阅在flutter应用程序中的dart中抛出错误?

Mah*_*ahi 5 dart flutter

connectivity在我的 flutter 中使用插件来检查连接状态,但PlatForm Exception(No active stream to cancel, null)即使我已经处理了空情况,偶尔也会遇到错误。我已订阅流initState并取消订阅dispose状态

我的代码看起来像这样。

    StreamSubscription streamConnectionStatus;
    ------------
    //remaining code
    ------------
    @override
    void initState() {
    getConnectionStatus();
  }

getConnectionStatus() async {
    streamConnectionStatus = new Connectivity()
        .onConnectivityChanged
        .listen((ConnectivityResult result) {
      // Got a new connectivity status!

      if (result == ConnectivityResult.mobile ||
          result == ConnectivityResult.wifi) {
        setState(() {
          boolHasConnection = true;
        });
      } else {
        setState(() {
          boolHasConnection = false;
        });
      }
    });

@override
  void dispose() {
    try {
      streamConnectionStatus?.cancel();
    } catch (exception, stackTrace) {
      print(exception.toString());
      updateError(exception.toString(), stackTrace);
    } finally {
      super.dispose();
    }
  }
Run Code Online (Sandbox Code Playgroud)

这实际上让我发疯了,但我猜我遗漏了一些东西,或者我必须更改代码。

非常感谢,马希

小智 3

我遇到了类似的问题。这对我有帮助。

我已经订阅了同一小部件​​树中不同小部件中的连接插件公开的流。我从子小部件中删除了订阅,并仅在父小部件中保留了订阅,并将连接状态从父小部件传递给了子小部件。

通过这样做,我的代码变得更加干净,并且流订阅仅在一个地方维护/处置。然后我就没有再遇到这个问题了。