GT Network
A production-ready Flutter network connectivity manager with automatic retry, lifecycle management, connection quality detection, and customizable no-internet overlays.
Features
- π Real Internet Verification - DNS lookup with multiple fallbacks (Google, Cloudflare)
- π Connection Quality - Excellent/Good/Fair/Poor based on latency
- π Automatic Retry - Heartbeat checks and smart recovery
- β―οΈ Lifecycle Aware - Pauses in background, resumes on foreground
- π¨ Customizable Overlays - Full-screen no-internet widget
- π§© Page-Level Widgets -
ConnectivityAwareWidgetfor granular control - π‘ Stream-Based - Real-time connectivity updates
- π± Simulator Detection - Aggressive mode for simulators/emulators
Installation
Add to your pubspec.yaml:
dependencies:
gt_network: ^1.0.0
Then run:
flutter pub get
Quick Start
1. Initialize in main.dart
import 'package:gt_network/gt_network.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Initialize connectivity manager
await ConnectivityManager.instance.initialize();
runApp(MyApp());
}
2. Wrap your app with ConnectivityListener
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorKey: NavigationService.navigatorKey, // Required for overlay
home: ConnectivityListener(
showNoInternetOverlay: true, // Shows overlay when offline
child: HomeScreen(),
),
);
}
}
3. Check connectivity anywhere
// Using extension
if (context.isOnline) {
await fetchData();
}
// Using manager directly
if (ConnectivityManager.instance.isOnline) {
await fetchData();
}
// Get detailed info
final info = ConnectivityManager.instance.current;
print('Status: ${info.status}');
print('Quality: ${info.quality}');
print('Is WiFi: ${info.isWifi}');
4. Page-level connectivity handling
ConnectivityAwareWidget(
onConnected: () async {
// Called when internet comes back
await refreshData();
},
onDisconnected: () async {
// Called when internet is lost
showSnackBar('You are offline');
},
noInternetWidget: NoInternetScreen(
onRetry: () => ConnectivityManager.instance.retry(),
),
child: YourPageContent(),
)
5. Listen to connectivity stream
StreamBuilder<ConnectivityInfo>(
stream: ConnectivityManager.instance.stream,
builder: (context, snapshot) {
final isOnline = snapshot.data?.isOnline ?? false;
return Icon(
isOnline ? Icons.wifi : Icons.wifi_off,
color: isOnline ? Colors.green : Colors.red,
);
},
)
Configuration
await ConnectivityManager.instance.initialize(
heartbeatInterval: Duration(seconds: 30), // Check interval
dnsTimeout: Duration(seconds: 2), // DNS lookup timeout
debounceDuration: Duration(milliseconds: 300),
forceSimulatorMode: false, // For testing
);
ConnectivityInfo Properties
| Property | Type | Description |
|---|---|---|
isOnline |
bool |
Has verified internet access |
isOffline |
bool |
No internet access |
isWifi |
bool |
Connected via WiFi |
isMobile |
bool |
Connected via mobile data |
quality |
ConnectionQuality |
excellent/good/fair/poor |
latency |
Duration? |
Connection latency |
License
MIT License - see LICENSE for details.
Libraries
- gt_network
- GT Network - A production-ready Flutter network connectivity manager.
- network_connectivity/connectivity_service
- network_connectivity/no_internet_screen