GT Network

pub package License: MIT

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 - ConnectivityAwareWidget for 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