X
    Categories: Flutter

Flutter Internet Connectivity Checker

Flutter Internet :

Flutter Internet Connectivity is one of the important aspect to make sure your application can connect to internet and make network api calls and fetch data from server.

Some apps may need high speed internet to perform tasks like file uploads, video calls and other services which may use high amounts of internet.

So it is a good practice to check whether the device is connected to a WiFi or a mobile network before proceeding to the task.

Because WiFi internet is considered to be the fastest and comes with Unlimited data usages when compared to mobile networks which are also faster but limited.

If there is an interruption in network then it might be result in app crash or app may not respond to avoid these we need to make sure internet connection to avoid these issues.

So in this part of the tutorial we will check the status of flutter internet before and this scenario will be helpful in knowing the current status of internet.

Flutter Internet Checker Video Tutorial :

Go through the below tutorial for more detailed information

 

Project Structure :

This image depicts the usage of flutter internet connectivity checker

 

pubspec.yaml :

Add connectivity dependency to pubspec file and update the version

dev_dependencies:
  flutter_test:
    sdk: flutter
  connectivity: 0.4.9

 

main.dart :

Initialize with void main()

void main() {
  _enablePlatformOverrideForDesktop();
  runApp(MyApp());
}

 

Enabling platform override for desktop

void _enablePlatformOverrideForDesktop() {
  if (!kIsWeb && (Platform.isWindows || Platform.isLinux)) {
    debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
  }
}

 

Return a material app and declare MyHomePage class with a title

MaterialApp(
  title: 'Flutter Demo',
  theme: ThemeData(
    primarySwatch: Colors.blue,
  ),
  home: MyHomePage(title: 'Flutter Home Page'),
);

 

MyHomePage class extending StatefulWidget and create a state

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

 

Declare a async method to check the flutter internet connectivity state using Future

Future<void> initConnectivity() async {
  ConnectivityResult result;
  try {
    result = await _connectivity.checkConnectivity();
  } on PlatformException catch (e) {
    print(e.toString());
  }

  if (!mounted) {
    return Future.value(null);
  }

  return _updateConnectionStatus(result);
}

 

Declare variables Connectivity, StreamSubscription

final Connectivity _connectivity = Connectivity();
StreamSubscription<ConnectivityResult> _connectivitySubscription;

 

Initialize variables in init() state

@override
void initState() {
  super.initState();
  initConnectivity();
  _connectivitySubscription =
      _connectivity.onConnectivityChanged.listen(_updateConnectionStatus);
}

 

Check connectivity status of flutter internet and update

If mobile connected to WiFi then need to return

1) WiFi name,

2) BSSID,

3) IP Address

 

case ConnectivityResult.wifi:
  String wifiName, wifiBSSID, wifiIP;

  try {
    if (!kIsWeb && Platform.isIOS) {
      LocationAuthorizationStatus status =
      await _connectivity.getLocationServiceAuthorization();
      if (status == LocationAuthorizationStatus.notDetermined) {
        status =
        await _connectivity.requestLocationServiceAuthorization();
      }
      if (status == LocationAuthorizationStatus.authorizedAlways ||
          status == LocationAuthorizationStatus.authorizedWhenInUse) {
        wifiName = await _connectivity.getWifiName();
      } else {
        wifiName = await _connectivity.getWifiName();
      }
    } else {
      wifiName = await _connectivity.getWifiName();
    }
  } on PlatformException catch (e) {
    print(e.toString());
    wifiName = "Failed to get Wifi Name";
  }

  try {
    if (!kIsWeb && Platform.isIOS) {
      LocationAuthorizationStatus status =
      await _connectivity.getLocationServiceAuthorization();
      if (status == LocationAuthorizationStatus.notDetermined) {
        status =
        await _connectivity.requestLocationServiceAuthorization();
      }
      if (status == LocationAuthorizationStatus.authorizedAlways ||
          status == LocationAuthorizationStatus.authorizedWhenInUse) {
        wifiBSSID = await _connectivity.getWifiBSSID();
      } else {
        wifiBSSID = await _connectivity.getWifiBSSID();
      }
    } else {
      wifiBSSID = await _connectivity.getWifiBSSID();
    }
  } on PlatformException catch (e) {
    print(e.toString());
    wifiBSSID = "Failed to get Wifi BSSID";
  }

  try {
    wifiIP = await _connectivity.getWifiIP();
  } on PlatformException catch (e) {
    print(e.toString());
    wifiIP = "Failed to get Wifi IP";
  }

  setState(() {
    _connectionStatus = '$result\n'
        'Wifi Name: $wifiName\n'
        'Wifi BSSID: $wifiBSSID\n'
        'Wifi IP: $wifiIP\n';
  });
  break;

 

If mobile connect to mobile network for internet

case ConnectivityResult.mobile:

 

or else if not connected in either case

case ConnectivityResult.none:

 

And finally declare default case if all the above steps failed

default:
  setState(() => _connectionStatus = 'Failed to get connectivity.');

 

FullCode :

Providing the full code for flutter internet checker implementation in you app.

import 'dart:async';
import 'dart:io';

import 'package:connectivity/connectivity.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void _enablePlatformOverrideForDesktop() {
  if (!kIsWeb && (Platform.isWindows || Platform.isLinux)) {
    debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
  }
}

void main() {
  _enablePlatformOverrideForDesktop();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _connectionStatus = 'Unknown';
  final Connectivity _connectivity = Connectivity();
  StreamSubscription<ConnectivityResult> _connectivitySubscription;

  @override
  void initState() {
    super.initState();
    initConnectivity();
    _connectivitySubscription =
        _connectivity.onConnectivityChanged.listen(_updateConnectionStatus);
  }

  @override
  void dispose() {
    _connectivitySubscription.cancel();
    super.dispose();
  }

  Future<void> initConnectivity() async {
    ConnectivityResult result;
    try {
      result = await _connectivity.checkConnectivity();
    } on PlatformException catch (e) {
      print(e.toString());
    }

    if (!mounted) {
      return Future.value(null);
    }

    return _updateConnectionStatus(result);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Connectivity example app'),
      ),
      body: Center(child: Text('Connection Status: $_connectionStatus')),
    );
  }

  Future<void> _updateConnectionStatus(ConnectivityResult result) async {
    switch (result) {
      case ConnectivityResult.wifi:
        String wifiName, wifiBSSID, wifiIP;

        try {
          if (!kIsWeb && Platform.isIOS) {
            LocationAuthorizationStatus status =
            await _connectivity.getLocationServiceAuthorization();
            if (status == LocationAuthorizationStatus.notDetermined) {
              status =
              await _connectivity.requestLocationServiceAuthorization();
            }
            if (status == LocationAuthorizationStatus.authorizedAlways ||
                status == LocationAuthorizationStatus.authorizedWhenInUse) {
              wifiName = await _connectivity.getWifiName();
            } else {
              wifiName = await _connectivity.getWifiName();
            }
          } else {
            wifiName = await _connectivity.getWifiName();
          }
        } on PlatformException catch (e) {
          print(e.toString());
          wifiName = "Failed to get Wifi Name";
        }

        try {
          if (!kIsWeb && Platform.isIOS) {
            LocationAuthorizationStatus status =
            await _connectivity.getLocationServiceAuthorization();
            if (status == LocationAuthorizationStatus.notDetermined) {
              status =
              await _connectivity.requestLocationServiceAuthorization();
            }
            if (status == LocationAuthorizationStatus.authorizedAlways ||
                status == LocationAuthorizationStatus.authorizedWhenInUse) {
              wifiBSSID = await _connectivity.getWifiBSSID();
            } else {
              wifiBSSID = await _connectivity.getWifiBSSID();
            }
          } else {
            wifiBSSID = await _connectivity.getWifiBSSID();
          }
        } on PlatformException catch (e) {
          print(e.toString());
          wifiBSSID = "Failed to get Wifi BSSID";
        }

        try {
          wifiIP = await _connectivity.getWifiIP();
        } on PlatformException catch (e) {
          print(e.toString());
          wifiIP = "Failed to get Wifi IP";
        }

        setState(() {
          _connectionStatus = '$result\n'
              'Wifi Name: $wifiName\n'
              'Wifi BSSID: $wifiBSSID\n'
              'Wifi IP: $wifiIP\n';
        });
        break;
      case ConnectivityResult.mobile:
      case ConnectivityResult.none:
        setState(() => _connectionStatus = result.toString());
        break;
      default:
        setState(() => _connectionStatus = 'Failed to get connectivity.');
        break;
    }
  }
}
abhishek:
Related Post

This website uses cookies.