connectivity_watcher 3.0.6
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 #
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 |
|---|---|---|
๐งโ๐ป 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 #
- zo_micro_interactions: A curated set of high-quality Flutter micro-interactions designed for modern, polished apps.
- zo_animated_border: Modern gradient border animations.
- zo_screenshot: Prevent screenshots and record secure areas.
- theme_manager_plus: Manage Flutter themes with custom classes.
- ultimate_extension: Powerful utilities for Dart collections.
- date_util_plus: Simplified date & time utilities.
- pick_color: Extract colors from images by tapping.
