Skip to content

Commit 2973132

Browse files
authored
MOBC-450/fix_connectivity_issue (#275)
- fix connectivity issue
1 parent 8cbb46c commit 2973132

File tree

2 files changed

+28
-25
lines changed

2 files changed

+28
-25
lines changed

lib/api/response/p2p_ping_response_result.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class P2pPingResponse extends P2pPingResponseModel {
6767
checkException(
6868
response: response,
6969
exceptionCreator: ({BaseExceptionModel? baseExceptionModel}) =>
70-
APIBaseException(baseExceptionModel: baseExceptionModel),
70+
BaseAPIException(baseExceptionModel: baseExceptionModel),
7171
);
7272

7373
return response;

lib/state/connection/connection_cubit.dart

+27-24
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,9 @@ class ConnectionCubit extends Cubit<ConnectionState> {
3232

3333
_connectionInformation = connectionInformation;
3434

35-
if (_api is BinaryAPI) {
36-
_setupConnectivityListener();
37-
}
35+
_connect(_connectionInformation);
3836

3937
_startKeepAliveTimer();
40-
41-
_connect(_connectionInformation);
4238
}
4339

4440
final String _key = '${UniqueKey()}';
@@ -74,6 +70,9 @@ class ConnectionCubit extends Cubit<ConnectionState> {
7470
/// Gets app id of websocket.
7571
static String get appId => _connectionInformation.appId;
7672

73+
/// Streamsubscription for connectivity.
74+
StreamSubscription<ConnectivityResult>? connectivitySubscription;
75+
7776
/// Reconnect to Websocket.
7877
Future<void> reconnect({ConnectionInformation? connectionInformation}) async {
7978
emit(const ConnectionDisconnectedState());
@@ -122,26 +121,30 @@ class ConnectionCubit extends Cubit<ConnectionState> {
122121
}
123122
},
124123
);
124+
125+
if (_api is BinaryAPI) {
126+
_setupConnectivityListener();
127+
}
125128
}
126129

127-
void _setupConnectivityListener() =>
128-
Connectivity().onConnectivityChanged.listen(
129-
(ConnectivityResult status) async {
130-
final bool isConnectedToNetwork =
131-
status == ConnectivityResult.mobile ||
132-
status == ConnectivityResult.wifi;
133-
134-
if (isConnectedToNetwork) {
135-
final bool isConnected = await _ping();
136-
137-
if (!isConnected) {
138-
await reconnect();
139-
}
140-
} else if (status == ConnectivityResult.none) {
141-
emit(const ConnectionDisconnectedState());
130+
void _setupConnectivityListener() {
131+
connectivitySubscription ??= Connectivity().onConnectivityChanged.listen(
132+
(ConnectivityResult status) async {
133+
final bool isConnectedToNetwork = status == ConnectivityResult.mobile ||
134+
status == ConnectivityResult.wifi;
135+
136+
if (isConnectedToNetwork) {
137+
final bool isConnected = await _ping();
138+
139+
if (!isConnected) {
140+
await reconnect();
142141
}
143-
},
144-
);
142+
} else if (status == ConnectivityResult.none) {
143+
emit(const ConnectionDisconnectedState());
144+
}
145+
},
146+
);
147+
}
145148

146149
void _startKeepAliveTimer() {
147150
if (_connectivityTimer == null || !_connectivityTimer!.isActive) {
@@ -154,7 +157,6 @@ class ConnectionCubit extends Cubit<ConnectionState> {
154157
try {
155158
final PingResponse response =
156159
await PingResponse.pingMethod().timeout(_pingTimeout);
157-
158160
return response.ping == PingEnum.pong;
159161
} on Exception catch (_) {
160162
return false;
@@ -164,7 +166,8 @@ class ConnectionCubit extends Cubit<ConnectionState> {
164166
@override
165167
Future<void> close() {
166168
_connectivityTimer?.cancel();
167-
169+
connectivitySubscription?.cancel();
170+
connectivitySubscription = null;
168171
return super.close();
169172
}
170173
}

0 commit comments

Comments
 (0)