@@ -8,6 +8,8 @@ import '../api/api.dart';
8
8
import '../database/database.dart' ;
9
9
import '../util/log_util.dart' ;
10
10
11
+ enum NetworkType { wifi, mobile, other, none }
12
+
11
13
class NetworkMonitor extends GetxService {
12
14
static NetworkMonitor get to => Get .find ();
13
15
@@ -17,7 +19,7 @@ class NetworkMonitor extends GetxService {
17
19
final _isWiFiConnected = false .obs;
18
20
bool get isWiFiConnected => _isWiFiConnected.value;
19
21
20
- bool _wasWiFiConnected = false ;
22
+ NetworkType _previousNetworkType = NetworkType .none ;
21
23
bool _isInitialized = false ;
22
24
23
25
@override
@@ -33,8 +35,8 @@ class NetworkMonitor extends GetxService {
33
35
34
36
// Check initial connectivity state
35
37
final initialResult = await _connectivity.checkConnectivity ();
36
- _updateWiFiStatus (initialResult);
37
- _wasWiFiConnected = _isWiFiConnected.value ;
38
+ _updateNetworkStatus (initialResult);
39
+ _previousNetworkType = _getNetworkType (initialResult) ;
38
40
_isInitialized = true ;
39
41
40
42
// Listen to connectivity changes
@@ -54,7 +56,20 @@ class NetworkMonitor extends GetxService {
54
56
super .onClose ();
55
57
}
56
58
57
- void _updateWiFiStatus (List <ConnectivityResult > result) {
59
+ NetworkType _getNetworkType (List <ConnectivityResult > result) {
60
+ if (result.contains (ConnectivityResult .wifi)) {
61
+ return NetworkType .wifi;
62
+ } else if (result.contains (ConnectivityResult .mobile)) {
63
+ return NetworkType .mobile;
64
+ } else if (result.contains (ConnectivityResult .none)) {
65
+ return NetworkType .none;
66
+ } else {
67
+ // Ethernet, Bluetooth, VPN, or other connection types
68
+ return NetworkType .other;
69
+ }
70
+ }
71
+
72
+ void _updateNetworkStatus (List <ConnectivityResult > result) {
58
73
final hasWiFi = result.contains (ConnectivityResult .wifi);
59
74
_isWiFiConnected.value = hasWiFi;
60
75
}
@@ -68,23 +83,23 @@ class NetworkMonitor extends GetxService {
68
83
return ;
69
84
}
70
85
71
- _updateWiFiStatus (result);
72
- final currentlyWiFi = _isWiFiConnected.value ;
86
+ _updateNetworkStatus (result);
87
+ final currentNetworkType = _getNetworkType (result) ;
73
88
74
- logInfo ('Network changed: wasWiFi=$ _wasWiFiConnected , currentlyWiFi=$ currentlyWiFi ' );
89
+ logInfo ('Network changed: previous=$ _previousNetworkType , current=$ currentNetworkType ' );
75
90
76
- // WiFi to Mobile Data: pause all tasks
77
- if (_wasWiFiConnected && ! currentlyWiFi ) {
91
+ // Only handle WiFi ↔ Mobile transitions, ignore other connection types
92
+ if (_previousNetworkType == NetworkType .wifi && currentNetworkType == NetworkType .mobile ) {
78
93
_pauseAllDownloads ();
79
94
logInfo ('Switched from WiFi to mobile data - pausing all downloads' );
80
- }
81
- // Mobile Data to WiFi: resume all tasks
82
- else if (! _wasWiFiConnected && currentlyWiFi) {
95
+ } else if (_previousNetworkType == NetworkType .mobile && currentNetworkType == NetworkType .wifi) {
83
96
_resumeAllDownloads ();
84
97
logInfo ('Switched from mobile data to WiFi - resuming all downloads' );
98
+ } else {
99
+ logInfo ('Network change ignored: not a WiFi ↔ Mobile transition' );
85
100
}
86
101
87
- _wasWiFiConnected = currentlyWiFi ;
102
+ _previousNetworkType = currentNetworkType ;
88
103
}
89
104
90
105
Future <void > _pauseAllDownloads () async {
0 commit comments