internet_connection_checker_plus 2.6.0 copy "internet_connection_checker_plus: ^2.6.0" to clipboard
internet_connection_checker_plus: ^2.6.0 copied to clipboard

A Flutter package to check your internet connection with subsecond response times, even on mobile networks!

Internet Connection Checker Plus #

A Flutter package to check your internet connection with subsecond response times, even on mobile networks!

pub package GitHub

GitHub issues GitHub issues closed


This library provides functionality to monitor and verify internet connectivity by checking reachability to various Uris. It relies on the connectivity_plus package for listening to connectivity changes and the http package for making network requests.

Features #

  • Check internet connectivity status
  • Listen for internet connectivity changes

Supported Platforms #

Platform Check Connectivity Listen for Changes
Android
iOS
macOS
Linux
Windows
Web

Permissions #

Android #

Add the following permissions to your AndroidManifest.xml file:

<uses-permission android:name="android.permission.INTERNET" />

macOS #

Add the following permissions to your macOS .entitlements files:

<key>com.apple.security.network.client</key>
<true/>

For more information, see the Flutter Networking Documentation.

Usage #

1. Add dependency #

Add the internet_connection_checker_plus package to your pubspec.yaml file:

dependencies:
  internet_connection_checker_plus: ^2.6.0

2. Import the package #

Import the internet_connection_checker_plus package into your Dart file:

import 'package:internet_connection_checker_plus/internet_connection_checker_plus.dart';

3. Checking for internet connectivity #

The simplest way to check for internet connectivity is to use the InternetConnection class:

bool result = await InternetConnection().hasInternetAccess;

4. Listening for internet connectivity changes #

The InternetConnection class also provides a stream of InternetStatus that can be used to listen for changes in internet connectivity:

final listener = InternetConnection().onStatusChange.listen((InternetStatus status) {
  switch (status) {
    case InternetStatus.connected:
      // The internet is now connected
      break;
    case InternetStatus.disconnected:
      // The internet is now disconnected
      break;
  }
});

Don't forget to cancel the subscription when it is no longer needed. This will prevent memory leaks and free up resources:

listener.cancel();

5. Add custom Uris to check #

The InternetConnection class can be configured to check custom Uris for internet connectivity:

final connection = InternetConnection.createInstance(
  customCheckOptions: [
    InternetCheckOption(uri: Uri.parse('https://example.com')),
  ],
);

Important

Make sure the custom Uris have no caching enabled. Otherwise, the results may be inaccurate.

Important

On web platform, make sure the custom Uris are not CORS blocked. Otherwise, the results may be inaccurate.

6. Add custom success criteria #

The InternetConnection class can be configured to check custom Uris for internet connectivity using custom success criteria:

final connection = InternetConnection.createInstance(
  customCheckOptions: [
    InternetCheckOption(
      uri: Uri.parse('https://example.com'),
      responseStatusFn: (response) {
        return response.statusCode >= 69 && response.statusCode < 169;
      },
    ),
    InternetCheckOption(
      uri: Uri.parse('https://example2.com'),
      responseStatusFn: (response) {
        return response.statusCode >= 420 && response.statusCode < 1412;
      },
    ),
  ],
);

7. Pause and Resume on App Lifecycle Changes #

For situation where you want to pause any network requests when the app goes into the background and resume them when the app comes back into the foreground (see issue #27):

class MyWidget extends StatefulWidget {
  const MyWidget({super.key});

  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  late final StreamSubscription<InternetStatus> _subscription;
  late final AppLifecycleListener _listener;

  @override
  void initState() {
    super.initState();
    _subscription = InternetConnection().onStatusChange.listen((status) {
      // Handle internet status changes
    });
    _listener = AppLifecycleListener(
      onResume: _subscription.resume,
      onHide: _subscription.pause,
      onPause: _subscription.pause,
    );
  }

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

  @override
  Widget build(BuildContext context) {
    // Build your widget
  }
}

Default Uris

The InternetConnection class uses the following Uris by default:

URI Description
https://one.one.one.one Response time is less than 100ms, CORS enabled, no-cache
https://icanhazip.com Response time is less than 100ms, CORS enabled, no-cache
https://jsonplaceholder.typicode.com/todos/1 Response time is less than 100ms, CORS enabled, no-cache
https://reqres.in/api/users/1 Response time is less than 100ms, CORS enabled, no-cache

Some Tested URIs

URI Description
https://ipapi.co/ip CORS enabled, no-cache
https://api.adviceslip.com/advice CORS enabled, no-cache
https://api.bitbucket.org/2.0/repositories CORS enabled, no-cache
https://api.thecatapi.com/v1/images/search CORS enabled, no-cache
https://api.coindesk.com/v1/bpi/currentprice.json CORS enabled, no-cache
https://lenta.ru Russia supported, CORS enabled, no-cache
https://www.gazeta.ru Russia supported, CORS enabled, no-cache

If you liked the package, then please give it a Like 👍🏼 and Star ⭐ #

Credits #

This package is a cloned and modified version of the internet_connection_checker package which is a cloned and modified version of the data_connection_checker package which is no longer maintained.

The aim of this package is to support the web platform which is currently not supported by the internet_connection_checker package.

317
likes
160
points
122k
downloads

Publisher

verified publisheroutdatedguy.rocks

Weekly Downloads

A Flutter package to check your internet connection with subsecond response times, even on mobile networks!

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

connectivity_plus, flutter, http

More

Packages that depend on internet_connection_checker_plus