connectivity_watcher 3.0.6 copy "connectivity_watcher: ^3.0.6" to clipboard
connectivity_watcher: ^3.0.6 copied to clipboard

A Flutter package for fast internet checks with subsecond response times and customizable offline UI.

connectivity_watcher #

pub package pub points License: MIT

A lightning-fast Flutter plugin for true internet connectivity monitoring. Most connectivity packages only check if the device's Wi-Fi or Mobile radio is "on." ZoConnectivityWatcher goes further by implementing a real-time Heartbeat Strategy (inspired by high-performance games like Clash of Clans and PUBG). It ensures your app knows when the internet is actually reachable, detecting "Liar Wi-Fi" (connected to a router but no data flow) in sub-second time.

Custom UI SnackBar Style Alert Dialog
Custom SnackBar Alert

๐Ÿง‘โ€๐Ÿ’ป Getting Started #

1. Install the package #

dependencies:
  flutter:
    sdk: flutter
  connectivity_watcher: ^[latest_version]

2. Import it #

import 'package:connectivity_watcher/connectivity_watcher.dart';

3. Initialize it in main.dart #

Basic Setup

Initialize the watcher in your main.dart. By default, it uses DNS socket checks (Google/Cloudflare) to verify connectivity.

WidgetsFlutterBinding.ensureInitialized();
ZoConnectivityWatcher().setUp();

Advanced: Custom Heartbeat & Timing

If you want to use your own website as the source of truth (highly recommended to bypass DNS blocks), pass a StealthInternetChecker instance to the setUp method.

ZoConnectivityWatcher().setUp(
  internetChecker: StealthInternetChecker(
    heartbeatUrl: "https://your-website.com", 
    checkInterval: Duration(seconds: 10),    
    timeout: Duration(seconds: 5),           
  ),
);

๐Ÿ”Œ Basic Usage #

Wrap Your App #

Use ZoConnectivityWrapper at the root of your app to monitor connection changes:

ZoConnectivityWrapper(
  connectivityStyle: NoConnectivityStyle.SNACKBAR,
  builder: (context, connectionKey) {
    return MaterialApp(
      navigatorKey: connectionKey,
      home: LoginDemo(),
    );
  },
);

Use Prebuilt UI Styles #

Snackbar Style

connectivityStyle: NoConnectivityStyle.SNACKBAR,

Alert Dialog Style

connectivityStyle: NoConnectivityStyle.ALERT,

๐Ÿงฉ Custom Offline Widget #

Want to show your own offline UI? Use NoConnectivityStyle.CUSTOM:

ZoConnectivityWrapper(
  connectivityStyle: NoConnectivityStyle.CUSTOM,
  offlineWidget: CustomNoInternetWrapper(
    builder: (context) => CustomNoInternet(),
  ),
  builder: (context, connectionKey) => MaterialApp(
    navigatorKey: connectionKey,
    home: LoginDemo(),
  ),
);

The widget is auto-removed once the internet is back. You can also remove it manually:

bool removed = await ZoConnectivityWatcher().hideNoInternet();
if (!removed) {
  print("Still no internet");
}

๐Ÿ” API Call with Retry #

Automatically retries failed API calls after connectivity is restored:

ZoConnectivityWatcher().makeApiCallWithRetry(
  maxRetries: 2,
  delay: const Duration(seconds: 1),
  apiCall: () async {
    final dio = Dio();
    dio.interceptors.add(CurlInterceptor());

    final response = await dio.post(
      "https://jsonplaceholder.typicode.com/posts",
      data: {
        "title": 'foo',
        "body": 'bar',
        "userId": 1,
      },
    );
  },
);

๐ŸŒ Check Internet Manually #

bool hasInternet = await ZoConnectivityWatcher().isInternetAvailable;

๐Ÿง  Network-Aware Widgets #

Use ZoNetworkAwareWidget to render UI based on real-time connectivity:

ZoNetworkAwareWidget(
  builder: (context, status) {
    return Container(
      height: 50,
      width: 250,
      decoration: BoxDecoration(
        color: Colors.blue,
        borderRadius: BorderRadius.circular(20),
      ),
      child: MaterialButton(
        onPressed: () {},
        child: Text(
          status == ConnectivityWatcherStatus.connected ? 'Connected' : 'Disconnected',
          style: TextStyle(color: Colors.black, fontSize: 25),
        ),
      ),
    );
  },
);

๐Ÿงช Curl Logging for Dio #

Log API requests as curl commands:

final dio = Dio();
dio.interceptors.add(CurlInterceptor());

๐Ÿ› ๏ธ Feature Requests & Bugs #

Have an idea or found a bug? Open an issue on GitHub.


๐Ÿ“ฆ More From Me #

44
likes
150
points
131
downloads
screenshot

Publisher

verified publisherthezerone.com

Weekly Downloads

A Flutter package for fast internet checks with subsecond response times and customizable offline UI.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

dio, flutter

More

Packages that depend on connectivity_watcher