feat: update app icons and refactor home top professionals section to display dynamic agent profiles.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import 'dart:async';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:real_estate_mobile/config/app_config.dart';
|
||||
import 'package:real_estate_mobile/core/network/api_client.dart';
|
||||
import 'package:real_estate_mobile/core/storage/secure_storage.dart';
|
||||
import 'package:real_estate_mobile/features/messaging/data/models/message.dart';
|
||||
import 'package:real_estate_mobile/features/support_chat/data/models/support_chat_models.dart';
|
||||
@@ -144,12 +145,31 @@ class SocketService {
|
||||
}
|
||||
|
||||
Future<void> _reconnectWithFreshToken() async {
|
||||
// Wait briefly for any in-flight REST token refresh to complete
|
||||
await Future.delayed(const Duration(milliseconds: 500));
|
||||
|
||||
final token = await SecureStorage.getAccessToken();
|
||||
if (token != null && token != _currentToken) {
|
||||
if (token == null) return;
|
||||
|
||||
// If token hasn't changed, try triggering a refresh via a lightweight API call
|
||||
if (token == _currentToken) {
|
||||
try {
|
||||
// Make a lightweight call that triggers the API client's 401 interceptor
|
||||
// which auto-refreshes the token
|
||||
final dio = ApiClient.instance.dio;
|
||||
await dio.get('/auth/me');
|
||||
final refreshedToken = await SecureStorage.getAccessToken();
|
||||
if (refreshedToken == null || refreshedToken == _currentToken) return;
|
||||
_currentToken = refreshedToken;
|
||||
} catch (_) {
|
||||
return; // Token refresh failed — user will need to re-login
|
||||
}
|
||||
} else {
|
||||
_currentToken = token;
|
||||
_socket?.io.options?['auth'] = {'token': token};
|
||||
_socket?.connect();
|
||||
}
|
||||
|
||||
_socket?.io.options?['auth'] = {'token': _currentToken};
|
||||
_socket?.connect();
|
||||
}
|
||||
|
||||
void disconnect() {
|
||||
|
||||
Reference in New Issue
Block a user