Skip to content

Commit 6639937

Browse files
committed
updated to version 1.0.1+28
1 parent 1a6ecd6 commit 6639937

28 files changed

+699
-355
lines changed

lib/apis/providers/api_provider.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:async';
22
import 'dart:convert';
33
import 'dart:io';
4+
45
import 'package:http/http.dart' as http;
56
import 'package:social_media_app/app_services/network_controller.dart';
67
import 'package:social_media_app/app_services/route_service.dart';
@@ -28,7 +29,7 @@ class ApiProvider {
2829

2930
String? baseUrl;
3031

31-
final _network = NetworkController.find;
32+
final _networkService = NetworkController.instance;
3233

3334
/// This is the method that is called from the service class.
3435
Future<dynamic> _catchAsyncApiError({
@@ -42,7 +43,7 @@ class ApiProvider {
4243
}) async {
4344
AppUtility.log('$feature Request');
4445

45-
if (_network.isConnected == false) {
46+
if (_networkService.isConnected == false) {
4647
AppUtility.log('Error: No network connection', tag: 'error');
4748
RouteService.set(RouteStatus.noNetwork);
4849
return;

lib/apis/providers/socket_api_provider.dart

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import 'dart:async';
22
import 'dart:convert';
33
import 'dart:io';
4+
5+
import 'package:social_media_app/app_services/auth_service.dart';
46
import 'package:social_media_app/constants/urls.dart';
57
import 'package:social_media_app/utils/utility.dart';
68

@@ -21,32 +23,43 @@ class SocketApiProvider {
2123
/// All the private and public variables
2224
static WebSocket? _socket;
2325
StreamController<dynamic>? _socketEventStream;
26+
var _isDisposed = false;
2427

2528
Stream<dynamic>? get socketEventStream =>
2629
_socketEventStream?.stream.asBroadcastStream();
30+
2731
WebSocket? get socket => _socket;
32+
2833
bool get isConnected => _socket?.readyState == WebSocket.open;
34+
2935
bool get isDisconnected => _socket?.readyState == WebSocket.closed;
36+
3037
bool get isConnecting => _socket?.readyState == WebSocket.connecting;
38+
3139
bool get isClosing => _socket?.readyState == WebSocket.closing;
40+
3241
bool get isNotConnected => _socket?.readyState != WebSocket.open;
3342

43+
bool get isDisposed => _isDisposed;
44+
3445
// All socket related functions.
35-
Future<void> init(String token) async {
46+
Future<void> init() async {
47+
final _authService = AuthService.find;
3648
AppUtility.log("Socket initializing...");
3749

3850
if (_socket != null && isConnected) {
3951
AppUtility.log("Socket already connected.");
4052
return;
4153
}
4254

43-
if (token.isEmpty) {
44-
AppUtility.log("Socket token is empty", tag: 'warning');
55+
if (_authService.token.isEmpty) {
56+
AppUtility.log("Socket token is empty");
4557
return;
4658
}
4759

4860
try {
49-
_socket = await WebSocket.connect('${AppUrls.webSocketUrl}?token=$token');
61+
_socket = await WebSocket.connect(
62+
'${AppUrls.webSocketUrl}?token=${_authService.token}');
5063

5164
if (_socket != null && isConnected) {
5265
AppUtility.log("Socket connection established");
@@ -56,12 +69,20 @@ class SocketApiProvider {
5669
_socket!.listen(
5770
_socketEventHandler,
5871
onError: (error) {
72+
_socket?.close();
73+
_socketEventStream?.close();
74+
_socketEventStream = null;
75+
_socket = null;
5976
AppUtility.log("Socket error: $error", tag: 'error');
60-
reconnect(token);
77+
reconnect(_authService.token);
6178
},
6279
onDone: () {
80+
_socket?.close();
81+
_socketEventStream?.close();
82+
_socketEventStream = null;
83+
_socket = null;
6384
AppUtility.log("Socket done");
64-
reconnect(token);
85+
reconnect(_authService.token);
6586
},
6687
cancelOnError: true,
6788
);
@@ -77,17 +98,24 @@ class SocketApiProvider {
7798
_socketApi._socketEventStream?.add(event);
7899
}
79100

80-
void close() {
81-
_socketApi._socketEventStream?.close();
101+
void dispose() {
102+
AppUtility.log("Socket disposing...");
82103
_socket?.close();
83-
_socketApi._socketEventStream = null;
104+
_socketEventStream?.close();
105+
_socketEventStream = null;
84106
_socket = null;
85-
AppUtility.log("Socket closed");
107+
_isDisposed = true;
108+
AppUtility.log("Socket disposed");
86109
}
87110

88111
void reconnect(String token) {
89-
close();
90-
init(token);
112+
if (isDisposed) {
113+
AppUtility.log("Socket is disposed");
114+
return;
115+
}
116+
117+
AppUtility.log("Socket reconnecting...");
118+
init();
91119
}
92120

93121
void send(String message) {

lib/app_services/auth_service.dart

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'dart:convert';
33
import 'dart:math' show Random;
44

55
import 'package:device_info_plus/device_info_plus.dart';
6+
import 'package:firebase_messaging/firebase_messaging.dart';
67
import 'package:get/get.dart';
78
import 'package:get_storage/get_storage.dart';
89
import 'package:http/http.dart' as http;
@@ -125,14 +126,28 @@ class AuthService extends GetxService {
125126
}
126127
}
127128

129+
Future<void> deleteAllLocalDataAndCache() async {
130+
await StorageService.remove('loginData');
131+
await StorageService.remove('profileData');
132+
await StorageService.remove("fcmToken");
133+
await HiveService.deleteAllBoxes();
134+
AppUtility.log('Local Data Removed');
135+
}
136+
128137
Future<void> _logout() async {
138+
final _socket = SocketApiProvider();
139+
final _chatController = ChatController.find;
129140
AppUtility.log("Logout Request");
130141
setToken = '';
131142
setExpiresAt = 0;
132-
_isLoggedIn = false;
133-
SocketApiProvider().close();
134-
await ChatController.find.close();
143+
144+
if (_socket.isConnected) {
145+
_socket.dispose();
146+
await _chatController.close();
147+
}
148+
await FirebaseMessaging.instance.deleteToken();
135149
await deleteAllLocalDataAndCache();
150+
_isLoggedIn = false;
136151
AppUtility.log("Logout Success");
137152
AppUtility.showSnackBar(
138153
'Logout Successfully',
@@ -168,14 +183,6 @@ class AuthService extends GetxService {
168183
AppUtility.log('Login Data Saved to Local Storage');
169184
}
170185

171-
Future<void> deleteAllLocalDataAndCache() async {
172-
await StorageService.remove('loginData');
173-
await StorageService.remove('profileData');
174-
await StorageService.remove("fcmToken");
175-
await HiveService.deleteAllBoxes();
176-
AppUtility.log('Local Data Removed');
177-
}
178-
179186
Future<void> saveFcmTokenToLocalStorage(String fcmToken) async {
180187
if (fcmToken.isEmpty) {
181188
AppUtility.log('Fcm Token is empty', tag: 'error');
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import 'package:social_media_app/app_services/network_controller.dart';
2+
import 'package:social_media_app/utils/utility.dart';
3+
import 'package:workmanager/workmanager.dart';
4+
5+
const backgroundMessageTask = "backgroundMessageTask";
6+
const backgroundNotificationTask = "backgroundNotificationTask";
7+
8+
@pragma('vm:entry-point')
9+
void callbackDispatcher() {
10+
Workmanager().executeTask((task, inputData) async {
11+
switch (task) {
12+
case backgroundMessageTask:
13+
final networkService = NetworkController.instance;
14+
if (!networkService.isInitialized) {
15+
await networkService.init();
16+
}
17+
if (networkService.isConnected) {
18+
AppUtility.log('Network is connected');
19+
}
20+
AppUtility.log('Background Message Task');
21+
break;
22+
case backgroundNotificationTask:
23+
AppUtility.log('Background Notification Task');
24+
break;
25+
case Workmanager.iOSBackgroundTask:
26+
AppUtility.log('iOS Background Task');
27+
break;
28+
}
29+
return Future.value(true);
30+
});
31+
}

0 commit comments

Comments
 (0)