connectivity_validator
Flutter plugin for validated internet connectivity: real internet access, not just “network connected.” Detects captive portals and router-without-internet. Stream-based, Android & iOS.
Features
- Validated connectivity (real internet, not only link up)
- Captive portal and “WiFi on, no internet” detection
- Real-time stream (
onConnectivityChanged) - Android (API 24+) and iOS (12.0+)
Installation
pubspec.yaml
dependencies:
connectivity_validator: ^0.0.6
flutter pub get
Platform setup
Android — Add to AndroidManifest.xml if needed:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
iOS
- Swift Package Manager (default) — No extra setup. Flutter uses SPM for the plugin.
- CocoaPods — If your project uses CocoaPods for this plugin, run in the project root:
cd ios && pod install && cd ..
Usage
import 'package:connectivity_validator/connectivity_validator.dart';
final validator = ConnectivityValidator();
validator.onConnectivityChanged.listen((isOnline) {
if (isOnline) {
// Internet validated
} else {
// No internet or captive portal
}
});
Get initial state and listen to changes:
final validator = ConnectivityValidator();
// Get initial state
final initialStatus = await validator.onConnectivityChanged.first;
print('Initial status: ${initialStatus ? "Online" : "Offline"}');
// Listen to changes
validator.onConnectivityChanged.listen((isOnline) {
print('Connectivity changed: ${isOnline ? "Online" : "Offline"}');
});
Live status (stream) + manual check (on-demand):
final validator = ConnectivityValidator();
// Live updates
validator.onConnectivityChanged.listen((isOnline) => /* update UI */);
// On-demand check (e.g. button tap)
final isOnline = await validator.getConnectivityStatus;
In UI (e.g. StreamBuilder):
StreamBuilder<bool>(
stream: ConnectivityValidator().onConnectivityChanged,
initialData: false,
builder: (context, snapshot) {
final isOnline = snapshot.data ?? false;
return Text(isOnline ? 'Online' : 'Offline');
},
)
Run the example:
cd example && flutter pub get && flutter run
Documentation
- State management (GetX, Provider, Riverpod, BLoC, ValueNotifier)
- API reference
- How it works
- Best practices
- Troubleshooting
Contributing
Contributions welcome. See the GitHub repo.
License
See LICENSE.