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...