Skip to content

Commit 1d7343b

Browse files
author
Saksham-flutter
committed
Improve Internet Queue When Internet Disconnected
1 parent 82f0116 commit 1d7343b

File tree

2 files changed

+26
-27
lines changed

2 files changed

+26
-27
lines changed

lib/data/utils/connectivity_status.dart

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,34 @@ import 'package:flutter/material.dart';
77
import 'package:mvc_flutter/data/utils/log_tags.dart';
88
import 'package:mvc_flutter/my_app/my_app.dart';
99
import 'package:mvc_flutter/ui/utils/base_class/inetrnet_connection_interupt.dart';
10+
import 'package:mvc_flutter/ui/utils/base_class/toasts.dart';
1011

1112
class NetworkConnection {
12-
NetworkConnection._();
13-
13+
static final Queue<Function> _functionQueue = Queue();
1414
static late StreamSubscription streamSubscription;
1515
static ValueNotifier<bool> isNetworkAvailable = ValueNotifier(false);
1616
static bool isAvailable = false;
1717

1818
static void networkStreaming() {
1919
streamSubscription = Connectivity().onConnectivityChanged.listen((event) {
20-
BuildContext? context = navigatorKey.currentContext;
20+
// BuildContext? context = navigatorKey.currentContext;
2121
if (event == ConnectivityResult.none) {
22-
isNetworkAvailable.value = false;
2322
isAvailable = false;
24-
if (context != null) {
25-
Navigator.pushNamed(context, InternetConnection.route);
26-
}
23+
isNetworkAvailable.value = false;
24+
errorToast("Internet Not Connected!");
25+
// if (context != null) {
26+
// Navigator.pushNamed(context, InternetConnection.route);
27+
// }
2728
} else {
28-
isNetworkAvailable.value = true;
2929
isAvailable = true;
30-
if (context != null) {
31-
if (Navigator.canPop(context)) {
32-
Navigator.pop(context);
33-
}
34-
}
30+
isNetworkAvailable.value = true;
31+
_executeQueuedFunctions();
32+
successToast("Internet Connection Restored!");
33+
// if (context != null) {
34+
// if (Navigator.canPop(context)) {
35+
// Navigator.pop(context);
36+
// }
37+
// }
3538
}
3639
log(
3740
"Network Changed: isNetworkOn- $isAvailable Type ${event.name}",
@@ -48,29 +51,25 @@ class NetworkConnection {
4851
}
4952
}
5053
}
51-
}
52-
53-
mixin InternetConnectionQueue {
54-
final Queue<Function> _functionQueue = Queue();
5554

56-
void addToQueue(Function function) {
55+
static void addToQueue(Function function) {
5756
if (!_functionQueue.contains(function)) {
5857
_functionQueue.add(function);
5958
}
6059
log("addToQueue working", name: LogTags.internetQueue);
6160
if (_functionQueue.length == 1) {
62-
executeQueuedFunctions();
61+
_executeQueuedFunctions();
6362
}
6463
}
6564

66-
Future<void> executeQueuedFunctions() async {
65+
static Future<void> _executeQueuedFunctions() async {
6766
log(
6867
"Checking Function In Pending ${_functionQueue.length}",
6968
name: LogTags.internetQueue,
7069
);
71-
if (NetworkConnection.isNetworkAvailable.value) {
70+
if (NetworkConnection.isAvailable) {
7271
while (_functionQueue.isNotEmpty) {
73-
final function = _functionQueue.first;
72+
final function = _functionQueue.first;
7473
try {
7574
await function();
7675
log("executeQueuedFunctions working", name: LogTags.internetQueue);

lib/ui/utils/base_class/view_model.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import 'package:provider/provider.dart';
1212
///Use of this class is helpful while using classes such as
1313
///[LoadingIndicatorConsumer], [CommonButtonLoading], [ScreenBase]
1414
///All of the above mentioned classes take generic parameters
15-
class ViewModel extends ChangeNotifier with InternetConnectionQueue {
15+
class ViewModel extends ChangeNotifier {
1616
bool _isLoading = false;
1717

1818
set isLoading(value) {
@@ -31,17 +31,17 @@ class ViewModel extends ChangeNotifier with InternetConnectionQueue {
3131
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
3232
onError?.call(ValidationConstant.serverErrorMessage);
3333
} else {
34-
addToQueue(api);
34+
NetworkConnection.addToQueue(api);
3535
onError?.call(ValidationConstant.internetErrorMessage);
3636
}
3737
} on SocketException catch (_) {
38-
addToQueue(api);
38+
NetworkConnection.addToQueue(api);
3939
onError?.call(ValidationConstant.internetErrorMessage);
4040
}
4141
}
4242

4343
void callApi(AsyncCallback api, {ValueChanged<String>? catchError}) {
44-
if (NetworkConnection.isNetworkAvailable.value) {
44+
if (NetworkConnection.isAvailable) {
4545
isLoading = true;
4646
api().then((_) {
4747
isLoading = false;
@@ -68,10 +68,10 @@ class ViewModel extends ChangeNotifier with InternetConnectionQueue {
6868
developer.log('Stack Trace: $stackTrace');
6969
});
7070
} else {
71+
NetworkConnection.addToQueue(api);
7172
if (catchError != null) {
7273
catchError.call(ValidationConstant.internetErrorMessage);
7374
} else {
74-
addToQueue(api);
7575
onError?.call(ValidationConstant.internetErrorMessage);
7676
}
7777
}

0 commit comments

Comments
 (0)