56 lines
1.8 KiB
Dart
56 lines
1.8 KiB
Dart
import '../config/app_config.dart';
|
||
import 'interfaces/auth_service.dart';
|
||
import 'interfaces/user_service.dart';
|
||
import 'interfaces/group_service.dart';
|
||
import 'interfaces/notification_service.dart';
|
||
import 'api/api_client.dart';
|
||
import 'api/auth_api_service.dart';
|
||
import 'api/user_api_service.dart';
|
||
import 'api/group_api_service.dart';
|
||
import 'api/notification_api_service.dart';
|
||
import 'mock/mock_auth_service.dart';
|
||
import 'mock/mock_user_service.dart';
|
||
import 'mock/mock_group_service.dart';
|
||
import 'mock/mock_notification_service.dart';
|
||
|
||
/// Singleton that wires together the correct service implementations
|
||
/// based on [AppConfig.debugMode].
|
||
class ServiceLocator {
|
||
static final ServiceLocator _instance = ServiceLocator._internal();
|
||
factory ServiceLocator() => _instance;
|
||
ServiceLocator._internal();
|
||
|
||
late final AuthService auth;
|
||
late final UserService users;
|
||
late final GroupService groups;
|
||
late final NotificationService notifications;
|
||
|
||
ApiClient? _apiClient;
|
||
|
||
void initialize() {
|
||
if (AppConfig.debugMode) {
|
||
auth = MockAuthService();
|
||
users = MockUserService();
|
||
groups = MockGroupService();
|
||
notifications = MockNotificationService();
|
||
} else {
|
||
_apiClient = ApiClient(baseUrl: AppConfig.baseUrl);
|
||
auth = AuthApiService(_apiClient!);
|
||
users = UserApiService(_apiClient!);
|
||
groups = GroupApiService(_apiClient!);
|
||
notifications = NotificationApiService(_apiClient!);
|
||
}
|
||
}
|
||
|
||
void setToken(String token) => _apiClient?.setToken(token);
|
||
void clearToken() => _apiClient?.clearToken();
|
||
|
||
/// Exposed for one-off direct API calls (e.g. notifications).
|
||
ApiClient get apiClient {
|
||
if (_apiClient == null) {
|
||
throw StateError('ApiClient not initialized – running in debug mode?');
|
||
}
|
||
return _apiClient!;
|
||
}
|
||
}
|