cyberhybridhub/lib/services/auth_service.dart
2026-05-31 11:17:12 -05:00

71 lines
2.0 KiB
Dart

import 'package:flutter/foundation.dart'
show TargetPlatform, defaultTargetPlatform, kIsWeb;
import '../admin/services/admin_access_service.dart';
import '../models/app_user.dart';
import 'auth_service_firebase.dart';
import 'auth_service_linux.dart';
/// Unified auth API for mobile, web, and Linux desktop development.
class AuthService {
AuthService._();
static final AuthService instance = AuthService._();
/// True when running the Linux desktop app (not unit tests on a Linux host).
static bool get isLinuxDesktop {
if (kIsWeb) {
return false;
}
if (const bool.fromEnvironment('FLUTTER_TEST')) {
return false;
}
return defaultTargetPlatform == TargetPlatform.linux;
}
Stream<AppUser?> get authStateChanges => isLinuxDesktop
? AuthServiceLinux.instance.authStateChanges
: AuthServiceFirebase.instance.authStateChanges;
AppUser? get currentUser => isLinuxDesktop
? AuthServiceLinux.instance.currentUser
: AuthServiceFirebase.instance.currentUser;
Future<void> initialize() async {
if (isLinuxDesktop) {
await AuthServiceLinux.instance.initialize();
} else {
await AuthServiceFirebase.instance.initialize();
}
}
Future<void> signInWithGoogle() async {
if (isLinuxDesktop) {
await AuthServiceLinux.instance.signInWithGoogle();
} else {
await AuthServiceFirebase.instance.signInWithGoogle();
}
}
Future<void> signOut() async {
if (isLinuxDesktop) {
await AuthServiceLinux.instance.signOut();
} else {
await AuthServiceFirebase.instance.signOut();
}
AdminAccessService.instance.reset();
}
/// Firebase ID token for API requests. Returns null when signed out.
Future<String?> getIdToken({bool forceRefresh = false}) async {
if (isLinuxDesktop) {
return AuthServiceLinux.instance.getIdToken(
forceRefresh: forceRefresh,
);
}
return AuthServiceFirebase.instance.getIdToken(
forceRefresh: forceRefresh,
);
}
}