import { useAuthContext } from '@/hooks/use-auth-context' import AuthProvider from '@/providers/auth-provider' import { NotesProvider } from "@/src/notes/NotesContext" import { AppThemeProvider, useAppTheme } from '@/src/theme/AppThemeProvider' import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native' import Constants from "expo-constants" import { Stack } from 'expo-router' import { StatusBar } from 'expo-status-bar' import { ComponentType, PropsWithChildren, useEffect, useState } from "react" import { Platform } from "react-native" import 'react-native-reanimated' import { SafeAreaProvider } from 'react-native-safe-area-context' // Separate RootNavigator so we can access the AuthContext function RootNavigator() { const { isLoggedIn, isLoading } = useAuthContext() const { palette } = useAppTheme() if (isLoading) { return null } return ( ) } function ThemedRootLayout() { const { colorScheme, palette } = useAppTheme() const navigationTheme = colorScheme === "dark" ? { ...DarkTheme, colors: { ...DarkTheme.colors, background: palette.background, card: palette.surface, text: palette.text, border: palette.border, primary: palette.accent, }, } : { ...DefaultTheme, colors: { ...DefaultTheme.colors, background: palette.background, card: palette.surface, text: palette.text, border: palette.border, primary: palette.accent, }, } return ( ) } function NotificationProviderGate({ children }: PropsWithChildren) { const isAndroidExpoGo = Platform.OS === "android" && Constants.executionEnvironment === "storeClient" const [provider, setProvider] = useState | null>(null) useEffect(() => { if (isAndroidExpoGo) { return } let isMounted = true const loadProvider = async () => { try { const module = await import("@/src/notifications/PushNotificationsProvider") if (isMounted) { setProvider(() => module.default) } } catch (error) { console.error("Failed to load push notifications provider:", error) } } void loadProvider() return () => { isMounted = false } }, [isAndroidExpoGo]) if (isAndroidExpoGo || !provider) { return children } const PushNotificationsProvider = provider return {children} } export default function RootLayout() { return ( ) }