**SOLVED** Check or listen continuously to internet connection/Network Connectivity in dart, flutter app

1,841

I had faced a similar problem a few weeks ago. This is a good approach. The internet_connection_checker plugin allows one to address issues at the network layer that the connectivity_plus plugin cannot address. I have carried out an implementation of these two plugins using the bloc library. For more information and code refer to this Stackoverflow post and this Github issue.

Share:
1,841
Admin
Author by

Admin

Updated on December 31, 2022

Comments

  • Admin
    Admin about 1 year

    I have been searching for long to know the best approach to listen to internet connection in flutter/dart app. I think this approach is better for now and it can be of help to some like me who has been searching. I have used many connectivity plugins, but it didn't work. I have equally used data_connection_checker, lookUpAddress etc as suggested by many but to no avail. But below helped. Use the below plugins to check or listen to Internet Connection / Network Connectivity in dart, flutter app.

    connectivity_plus

    internet_connection_checker

    import 'dart:async';
    import 'package:connectivity_plus/connectivity_plus.dart';
    import 'package:internet_connection_checker/internet_connection_checker.dart';
    
    class ConnectionUtil {
      static final ConnectionUtil _singleton = new ConnectionUtil._internal();
      ConnectionUtil._internal();
    
      static ConnectionUtil getInstance() => _singleton;
    
      bool hasConnection = false;
    
      StreamController connectionChangeController = StreamController();
    
      final Connectivity _connectivity = Connectivity();
      void initialize() {
        _connectivity.onConnectivityChanged.listen(_connectionChange);
      }
    
      void _connectionChange(ConnectivityResult result) {
        _hasInternetInternetConnection();
      }
    
      Stream get connectionChange => connectionChangeController.stream;
      Future<bool> _hasInternetInternetConnection() async {
        bool previousConnection = hasConnection;
        var connectivityResult = await (Connectivity().checkConnectivity());
        if (connectivityResult == ConnectivityResult.mobile || connectivityResult == ConnectivityResult.wifi) {
          // this is the different
          if (await InternetConnectionChecker().hasConnection) {
            hasConnection = true;
          } else {
            hasConnection = false;
          }
        } else {
          hasConnection = false;
        }
    
        if (previousConnection != hasConnection) {
          connectionChangeController.add(hasConnection);
        }
        return hasConnection;
      }
    }
    
    

    Implement this code on the stateful widget.....

      bool hasInterNetConnection = false;
    
      @override
      initState() {
        ConnectionUtil connectionStatus = ConnectionUtil.getInstance();
        connectionStatus.initialize();
        connectionStatus.connectionChange.listen(connectionChanged);
    
        super.initState();
      }
    
      void connectionChanged(dynamic hasConnection) {
        setState(() {
          hasInterNetConnection = hasConnection;
        });
      }
    
    

    Good luck