internet_state_manager 1.10.1+3 copy "internet_state_manager: ^1.10.1+3" to clipboard
internet_state_manager: ^1.10.1+3 copied to clipboard

Seamless internet connection management for Flutter. Auto-detect, handle outages, and restore state with minimal code.

Stand With Palestine

Internet State Manager 🌐 #

pub package License: BSD 3-Clause

A powerful Flutter package for seamless internet connection management. Not just another connectivity checker — it's a complete solution that handles, monitors, and manages internet states across your entire app with minimal code! 🚀

⚡ Key Features #

  • 🧩 Minimal Code — Wrap once, works everywhere — no boilerplate
  • ⏱️ Save Time — Eliminate repetitive connectivity checks on every screen
  • 🎯 Better UX — Auto-handle offline states with smooth built-in UI transitions
  • 🔄 Smart Auto-Refresh — Fetch fresh data automatically when connection restores via onConnectionRestored
  • 🎯 Accurate Detection — Goes beyond Wi-Fi checks — verifies actual internet access
  • 📡 Real-time Monitoring — Stream-based connectivity updates with customizable check intervals
  • 🎨 Fully Customizable — Use built-in widgets or create your own custom offline screens

💡 How It Works #

Simple 3-step setup:

  1. Initialize → Wrap your app with InternetStateManagerInitializer
  2. Wrap → Add InternetStateManager to any screen
  3. Done! → The package handles everything automatically ✨

Behind the scenes:

  • 🔍 Periodically checks actual internet access (not just Wi-Fi)
  • 🖼️ Shows a built-in "No Internet" screen when disconnected
  • 🔄 Automatically restores your screen when connection returns
  • 📞 Optionally triggers callbacks to refresh your data

📱 Demo #

Internet State Manager Demo

The demo shows:

  • First Screen: Uses InternetStateManager with a bottom widget bar that appears when disconnected, showing "لا يوجد اتصال بالانترنت" (No internet connection) with a "Try again" button
  • Second Screen: Uses InternetStateManager with NoInternetScreen - automatically appears when WiFi is disconnected
  • Auto-detection: Both screens automatically check internet connection periodically based on library options
  • Connection Restored: When WiFi reconnects, "Internet connection restored" message appears and content is restored

📋 Requirements #

  • Flutter: ≥ 3.19.0
  • Dart: ≥ 3.3.0 <4.0.0
  • iOS: ≥ 12.0
  • macOS: ≥ 10.14
  • Java: 17
  • Android Gradle Plugin: ≥ 8.12.1
  • Gradle Wrapper: ≥ 8.13

🚀 Getting Started #

Installation

Add to your pubspec.yaml:

dependencies:
  internet_state_manager: ^1.10.0

Then run:

flutter pub get
Platform Configuration

Android #

Add these permissions to android/app/src/main/AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    
    <!-- Required for internet_state_manager -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    
    <application ...>

iOS #

Add to ios/Runner/Info.plist:

<key>NSLocalNetworkUsageDescription</key>
<string>This app requires access to the local network to monitor connectivity status.</string>

📖 Usage #

1. Initialize the Package

Wrap your app with InternetStateManagerInitializer:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // ⚠️ REQUIRED: Initialize before runApp
  await InternetStateManagerInitializer.initialize();

  runApp(
    InternetStateManagerInitializer(
      options: InternetStateOptions(
        checkConnectionPeriodic: const Duration(seconds: 3),
        showLogs: true,
      ),
      child: const MyApp(),
    ),
  );
}
2. Wrap Your Screens

Simply wrap any screen with InternetStateManager:

@override
Widget build(BuildContext context) {
  return InternetStateManager(
    child: Scaffold(
      body: Center(
        child: Text('Your content here'),
      ),
    ),
  );
}

🎨 Customization #

Builder Widget

Full control over your UI based on connection state:

InternetStateManager.builder(
  builder: (context, state) {
    return Scaffold(
      body: Center(
        child: state.status.isConnected
            ? Text('✅ Connected!')
            : Text('❌ No internet'),
      ),
    );
  },
);
Connection Restoration Callback

Execute logic when connection is restored:

InternetStateManager(
  onRestoreInternetConnection: () {
    // Refresh data, sync, etc.
    setState(() {
      fetchData();
    });
  },
  child: MyScreen(),
);
Custom No-Internet Screen

Replace the default disconnected UI:

InternetStateManager(
  noInternetScreen: CustomNoInternetWidget(),
  child: MyScreen(),
);
Options Configuration
InternetStateOptions(
  // Check interval when connected
  checkConnectionPeriodic: const Duration(seconds: 12),
  
  // Check interval when disconnected (faster retry)
  disconnectionCheckPeriodic: const Duration(seconds: 3),
  
  // Custom colors
  errorBackgroundColor: Colors.red,
  onBackgroundColor: Colors.white,
  
  // Custom labels
  labels: InternetStateLabels(
    noInternetTitle: () => 'Oops! No Connection',
    descriptionText: () => 'Please check your network',
    tryAgainText: () => 'Retry',
  ),
  
  // Debug logs
  showLogs: true,
)

🛠️ Advanced Usage #

Dio Interceptor (Optional)

If you use Dio, you can optionally add the interceptor to keep connectivity state fresh with each HTTP request:

final dio = Dio();
dio.interceptors.add(InternetStateManagerInterceptor());

The interceptor triggers a non-blocking connectivity check on every request, keeping the UI state updated without slowing down your API calls.

Note: This is completely optional. The package works perfectly without it.

Context Extensions

Access connection state from anywhere:

// Check current state
bool isConnected = context.internetState.isConnected;

// Manual connection check
await context.internetCheck();

// Listen to connection stream
context.internetStateStream.listen((state) {
  print('Connection changed: ${state.isConnected}');
});
Global App Integration

Apply to your entire app:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      builder: (context, child) => InternetStateManager(child: child!),
      home: HomeScreen(),
    );
  }
}

🙏 Credits #

Developed by Mostafa Alazhariy

Dependencies:


👥 Contributors #

contributors


⭐ Support #

If you find this package helpful, please give it a star on GitHub!

Feel free to open issues or submit PRs.

17
likes
160
points
10
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Seamless internet connection management for Flutter. Auto-detect, handle outages, and restore state with minimal code.

Repository (GitHub)
View/report issues

Topics

#connectivity #network #offline #internet #connection-checker

License

BSD-3-Clause (license)

Dependencies

bloc, connectivity_plus, dio, equatable, flutter, flutter_bloc, internet_connection_checker_plus

More

Packages that depend on internet_state_manager