import { QueryClientProvider } from "@tanstack/react-query"; import { Stack } from "expo-router"; import { DarkTheme, DefaultTheme, type Theme, ThemeProvider, } from "@react-navigation/native"; import { StatusBar } from "expo-status-bar"; import { GestureHandlerRootView } from "react-native-gesture-handler"; import "../global.css"; import { queryClient } from "@/utils/trpc"; import { NAV_THEME } from "@/lib/constants"; import React, { useRef } from "react"; import { useColorScheme } from "@/lib/use-color-scheme"; import { Platform } from "react-native"; import { setAndroidNavigationBar } from "@/lib/android-navigation-bar"; const LIGHT_THEME: Theme = { ...DefaultTheme, colors: NAV_THEME.light, }; const DARK_THEME: Theme = { ...DarkTheme, colors: NAV_THEME.dark, }; export const unstable_settings = { // Ensure that reloading on `/modal` keeps a back button present. initialRouteName: "(drawer)", }; export default function RootLayout() { const hasMounted = useRef(false); const { colorScheme, isDarkColorScheme } = useColorScheme(); const [isColorSchemeLoaded, setIsColorSchemeLoaded] = React.useState(false); useIsomorphicLayoutEffect(() => { if (hasMounted.current) { return; } if (Platform.OS === "web") { // Adds the background color to the html element to prevent white background on overscroll. document.documentElement.classList.add("bg-background"); } setAndroidNavigationBar(colorScheme); setIsColorSchemeLoaded(true); hasMounted.current = true; }, []); if (!isColorSchemeLoaded) { return null; } return ( ); } const useIsomorphicLayoutEffect = Platform.OS === "web" && typeof window === "undefined" ? React.useEffect : React.useLayoutEffect;