E/EventChannel#plugins.flutter.io/connectivity_status(28677): Failed to close existing event stream

1,084

I assume you have already solved this problem so this if for the people who come in the future and still have this problem.

I fixed it by upgrading to the latest version where they fixed the issue:

connectivity: ^2.0.2
Share:
1,084
Akshay
Author by

Akshay

Updated on December 25, 2022

Comments

  • Akshay
    Akshay over 1 year

    I have started development in flutter. In one scenario I have to check if the user is connected to internet or not. I am using connectivity 0.4.9+5 and data_connection_checker 0.3.4 in combination to check if user has active connection or not.

    I have create one file internet_connectivity_service.dart which perform all the task related to it.

    class InternetConnectivityService {
      StreamSubscription<ConnectivityResult> _subscription;
    
      /*
        * This function check if the device has internet connectivity.
        * With the help of DataConnectionChecker it checks for actual internet connectivity. 
      */
      Future<bool> _checkConnectivity() async {
        if (await DataConnectionChecker().hasConnection) {
          return true;
        } else {
          return false;
        }
      }
    
      /*
        * This function is invoked to on each connection change request.
        * Using Connectivity package it will check for connectivity and connection type.
        * This function has return type of Future<bool> which perform async request to check connectivity.
        * After checking connection type it check for divice has internet accesssible or not.
      */
      Future<bool> _hasInternet() async {
        var connectivityResult = await (Connectivity().checkConnectivity());
        if (connectivityResult == ConnectivityResult.mobile) {
          return _checkConnectivity();
        } else if (connectivityResult == ConnectivityResult.wifi) {
          return _checkConnectivity();
        } else {
          return false;
        }
      }
    
      StreamSubscription<ConnectivityResult> initInterNetConnectivitySubscription(
          BuildContext context) {
        // * Subscribe to connectivity changes
        _subscription = Connectivity().onConnectivityChanged.listen(
          (ConnectivityResult result) {
            _hasInternet().then(
              (result) {
                // * When internet is disconnected
                Size size = MediaQuery.of(context).size;
                if (!result) {
                  Scaffold.of(context).showSnackBar(
                    snackBarBuilder(
                        color: kErrorColor,
                        text: 'Connection Lost',
                        context: context),
                  );
                } else {
                  Scaffold.of(context).showSnackBar(
                    snackBarBuilder(
                        color: kSuccessColor, text: 'Connected', context: context),
                  );
                }
              },
            );
          },
        );
        return _subscription;
      }
    
      disposeSubscription() {
        _subscription.cancel();
      }
    }
    
    

    Function initInterNetConnectivitySubscription and disposeSubscription are used for subscribe and unsubscribe for particular event. I am calling these methods from component where I want this functionality.

    For Example:

         InternetConnectivityService internetConnectivityService =
          InternetConnectivityService();
    
      @override
      initState() {
        internetConnectivityService.initInterNetConnectivitySubscription(context);
        super.initState();
      }
    
      @override
      dispose() {
        internetConnectivityService.disposeSubscription();
        super.dispose();
      }
    
    

    By doing so functionality is working sometimes but sometimes I am facing error stating E/EventChannel#plugins.flutter.io/connectivity_status(28677): Failed to close existing event stream.

    Complete stack trace.

       Restarted application in 5,259ms.
    E/EventChannel#plugins.flutter.io/connectivity_status(28677): Failed to close existing event stream
    E/EventChannel#plugins.flutter.io/connectivity_status(28677): java.lang.IllegalArgumentException: NetworkCallback was not registered
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at com.android.internal.util.Preconditions.checkArgument(Preconditions.java:50)
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at android.net.ConnectivityManager.unregisterNetworkCallback(ConnectivityManager.java:4009)
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at io.flutter.plugins.connectivity.ConnectivityBroadcastReceiver.onCancel(ConnectivityBroadcastReceiver.java:53)
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at io.flutter.plugin.common.EventChannel$IncomingStreamRequestHandler.onListen(EventChannel.java:182)
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at io.flutter.plugin.common.EventChannel$IncomingStreamRequestHandler.onMessage(EventChannel.java:167)
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at android.os.MessageQueue.nativePollOnce(Native Method)
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at android.os.MessageQueue.next(MessageQueue.java:336)
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at android.os.Looper.loop(Looper.java:174)
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at android.app.ActivityThread.main(ActivityThread.java:7356)
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at java.lang.reflect.Method.invoke(Native Method)
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    E/EventChannel#plugins.flutter.io/connectivity_status(28677):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)**strong text**
    
    

    Due to this error my application is not getting crash but sometime functionality doesnot work as desired. Please let me know if I am making some mistake or if their is better way of doing so. I just wan't to have functionality in which when user don't have connection than application will show stating that you are not connected to internet.