connectivity_watcher

pub package
pub points
License: MIT

A lightning-fast Flutter plugin for internet connectivity monitoring โ€” with subsecond response times, built-in retry mechanisms, and fully customizable UI for alerts and status widgets.

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

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

๐Ÿ”Œ 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