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 get authStateChanges => isLinuxDesktop ? AuthServiceLinux.instance.authStateChanges : AuthServiceFirebase.instance.authStateChanges; AppUser? get currentUser => isLinuxDesktop ? AuthServiceLinux.instance.currentUser : AuthServiceFirebase.instance.currentUser; Future initialize() async { if (isLinuxDesktop) { await AuthServiceLinux.instance.initialize(); } else { await AuthServiceFirebase.instance.initialize(); } } Future signInWithGoogle() async { if (isLinuxDesktop) { await AuthServiceLinux.instance.signInWithGoogle(); } else { await AuthServiceFirebase.instance.signInWithGoogle(); } } Future 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 getIdToken({bool forceRefresh = false}) async { if (isLinuxDesktop) { return AuthServiceLinux.instance.getIdToken( forceRefresh: forceRefresh, ); } return AuthServiceFirebase.instance.getIdToken( forceRefresh: forceRefresh, ); } }