Skip to content

Commit 7f95e9b

Browse files
committed
fix: connectivity ping issue
1 parent f24bf41 commit 7f95e9b

File tree

1 file changed

+30
-29
lines changed

1 file changed

+30
-29
lines changed

lib/state/connection/connection_cubit.dart

Lines changed: 30 additions & 29 deletions
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());
@@ -111,11 +110,9 @@ class ConnectionCubit extends Cubit<ConnectionState> {
111110
emit(const ConnectionConnectedState());
112111
}
113112
},
114-
onDone: (String key) async {
113+
onDone: (String key) {
115114
if (_key == key) {
116-
await _api!.disconnect();
117-
118-
emit(const ConnectionDisconnectedState());
115+
unawaited(reconnect());
119116
}
120117
},
121118
onError: (String key) {
@@ -124,28 +121,32 @@ class ConnectionCubit extends Cubit<ConnectionState> {
124121
}
125122
},
126123
);
124+
125+
if (_api is BinaryAPI) {
126+
_setupConnectivityListener();
127+
}
127128
}
128129

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

148-
void _startKeepAliveTimer() {
149+
Future<void> _startKeepAliveTimer() async {
149150
if (_connectivityTimer == null || !_connectivityTimer!.isActive) {
150151
_connectivityTimer =
151152
Timer.periodic(_connectivityCheckInterval, (Timer timer) => _ping());
@@ -156,7 +157,6 @@ class ConnectionCubit extends Cubit<ConnectionState> {
156157
try {
157158
final PingResponse response =
158159
await PingResponse.pingMethod().timeout(_pingTimeout);
159-
160160
return response.ping == PingEnum.pong;
161161
} on Exception catch (_) {
162162
return false;
@@ -166,7 +166,8 @@ class ConnectionCubit extends Cubit<ConnectionState> {
166166
@override
167167
Future<void> close() {
168168
_connectivityTimer?.cancel();
169-
169+
connectivitySubscription?.cancel();
170+
connectivitySubscription = null;
170171
return super.close();
171172
}
172173
}

0 commit comments

Comments
 (0)