Monitor internet connection custom action randomly works or doesn't work (using internet_connection_checker_plus: ^2.0.0)

Custom Code

Hello, I have the following code as a custom action to check internet connectivity continuously:

// Automatic FlutterFlow imports
import '/backend/backend.dart';
import '/backend/schema/structs/index.dart';
import '/backend/schema/enums/enums.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/actions/index.dart'; // Imports other custom actions
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
// Begin custom action code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!

import 'package:internet_connection_checker_plus/internet_connection_checker_plus.dart';

class InternetConnectionDialog extends StatefulWidget {
  final String message;
  final bool hasInternet;

  const InternetConnectionDialog({
    Key? key,
    required this.message,
    required this.hasInternet,
  }) : super(key: key);

  @override
  _InternetConnectionDialogState createState() =>
      _InternetConnectionDialogState();
}

class _InternetConnectionDialogState extends State<InternetConnectionDialog> {
  @override
  Widget build(BuildContext context) {
    return AlertDialog(
      title: Text('Internet Connection'),
      content: Text(widget.message),
      actions: <Widget>[
        TextButton(
          onPressed:
              widget.hasInternet ? () => Navigator.of(context).pop() : null,
          child: Text('OK'),
        ),
      ],
    );
  }
}

bool? previousStatus; // To keep track of previous internet status

Future<void> monitorInternetConnection(
    BuildContext context, String? language) async {
  final initialStatus = await InternetConnection().hasInternetAccess;
  previousStatus = initialStatus;

  if (!initialStatus) {
    debugPrint('1. I get here: NO internet connection');
    String message = language == 'el'
        ? 'Δεν υπάρχει σύνδεση στο internet. Παρακαλώ ελέγξτε τη σύνδεσή σας.'
        : 'There is no internet connection. Please check your connection.';
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return InternetConnectionDialog(
          message: message,
          hasInternet: false,
        );
      },
    );
  }

  InternetConnection().onStatusChange.listen((InternetStatus status) {
    if (status == InternetStatus.disconnected && previousStatus == true) {
      previousStatus = false;
      debugPrint('2. I get here: NO internet connection');
      String message = language == 'el'
          ? 'Δεν υπάρχει σύνδεση στο internet. Παρακαλώ ελέγξτε τη σύνδεσή σας.'
          : 'There is no internet connection. Please check your connection.';
      Navigator.of(context).popUntil((route) => route.isFirst);
      showDialog(
        context: context,
        builder: (BuildContext context) {
          return InternetConnectionDialog(
            message: message,
            hasInternet: false,
          );
        },
      );
    } else if (status == InternetStatus.connected && previousStatus == false) {
      previousStatus = true;
      debugPrint('3. I get here: YES internet connection');
      String message = language == 'el'
          ? 'Έχετε σύνδεση στο internet.'
          : 'You have internet connection.';
      Navigator.of(context).popUntil((route) => route.isFirst);
      showDialog(
        context: context,
        builder: (BuildContext context) {
          return InternetConnectionDialog(
            message: message,
            hasInternet: true,
          );
        },
      );
    }
  });
}

// Usage
// To check if there's internet access:
// bool isConnected = await InternetConnection().hasInternetAccess;

the code sometimes works, sometimes does not work. It behaves randomly.

I also see the following errors in the chrome console if these help somehow:

HEAD https://reqres.in/api/users/1 net::ERR_INTERNET_DISCONNECTED
webchannel_connection.ts:265 
        
        
       POST https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fflutterflow-io-6f20%2Fdatabases%2F(default)&RID=26054&CVER=22&X-HTTP-Session-Id=gsessionid&zx=ic2w9q9ef0b5&t=1 net::ERR_INTERNET_DISCONNECTED
dart_sdk.js:11914 Uncaught (in promise) Error: Unexpected null value.
    at Object.throw_ [as throw] (dart_sdk.js:11914:11)
    at Object.nullCheck (dart_sdk.js:12286:30)
    at get state (framework.dart:5599:44)
    at Navigator.of (navigator.dart:2683:46)
    at monitor_internet_connection.dart:93:17
    at _RootZone.runUnaryGuarded (dart_sdk.js:49514:11)
    at [_sendData] (dart_sdk.js:43166:22)
    at _DelayedData.new.perform (dart_sdk.js:46614:28)
    at _PendingEvents.new.handleNext (dart_sdk.js:46737:15)
    at async._AsyncCallbackEntry.new.callback (dart_sdk.js:46709:16)
    at Object._microtaskLoop (dart_sdk.js:50026:13)
    at _startMicrotaskLoop (dart_sdk.js:50032:13)
    at dart_sdk.js:45573:9
dart_sdk.js:11914 Uncaught (in promise) Error: Unsupported operation: InternetAddress.lookup
    at Object.throw_ [as throw] (dart_sdk.js:11914:11)
    at InternetAddress.lookup (dart_sdk.js:68400:17)
    at checkConnection (connected.dart:40:42)
    at checkConnection.next (<anonymous>)
    at runBody (dart_sdk.js:49741:34)
    at Object._async [as async] (dart_sdk.js:49777:7)
    at Object.checkConnection (connected.dart:36:29)
    at connected.dart:24:32
    at Generator.next (<anonymous>)
    at runBody (dart_sdk.js:49741:34)
    at Object._async [as async] (dart_sdk.js:49777:7)
    at connected.dart:21:35
    at _RootZone.runUnaryGuarded (dart_sdk.js:49514:11)
    at [_sendData] (dart_sdk.js:43166:22)
    at _DelayedData.new.perform (dart_sdk.js:46614:28)
    at _PendingEvents.new.handleNext (dart_sdk.js:46737:15)
    at async._AsyncCallbackEntry.new.callback (dart_sdk.js:46709:16)
    at Object._microtaskLoop (dart_sdk.js:50026:13)
    at _startMicrotaskLoop (dart_sdk.js:50032:13)
    at dart_sdk.js:45573:9

does anyone have any idea what the issues are and how I can fix them? Thank you...

What have you tried so far?

Tried implementing it.

Did you check FlutterFlow's Documentation for this topic?
Yes
1
4 replies