69 lines
1.9 KiB
Dart
69 lines
1.9 KiB
Dart
import 'package:flutter/foundation.dart'
|
|
show TargetPlatform, defaultTargetPlatform, kIsWeb;
|
|
|
|
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();
|
|
}
|
|
}
|
|
|
|
/// 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,
|
|
);
|
|
}
|
|
}
|