import { useColorScheme } from '@/hooks/useColorScheme';
import { ThemeProvider } from '@/providers/theme-provider';
import { Colors } from '@/theme/colors';
import { osName } from 'expo-device';
import { isLiquidGlassAvailable } from 'expo-glass-effect';
import * as NavigationBar from 'expo-navigation-bar';
import { Stack } from 'expo-router';
import * as SecureStore from 'expo-secure-store';
import * as SplashScreen from 'expo-splash-screen';
import { StatusBar } from 'expo-status-bar';
import { setBackgroundColorAsync } from 'expo-system-ui';
import React, { useEffect } from 'react';
import { Platform } from 'react-native';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import 'react-native-reanimated';
SplashScreen.setOptions({
duration: 200,
fade: true,
});
export default function RootLayout() {
return (
{/* `storage` makes the light/dark choice survive a restart. SecureStore
has no web implementation, so on web this degrades to no persistence
rather than erroring — the toggle itself still works there. */}
);
}
/**
* Split out so `useColorScheme()` resolves *inside* `ThemeProvider`. Read above
* it and this would see the OS scheme rather than the user's choice — which on
* native the global `Appearance` override happens to paper over, but on web
* would leave the sheet's colors stuck on the system theme.
*/
function RootNavigator() {
const colorScheme = useColorScheme() || 'light';
useEffect(() => {
if (Platform.OS === 'android') {
// `setButtonStyleAsync` was removed in expo-navigation-bar 57; `setStyle`
// is the replacement and is synchronous.
NavigationBar.setStyle(colorScheme === 'light' ? 'dark' : 'light');
}
}, [colorScheme]);
// Keep the root view background color in sync with the current theme
useEffect(() => {
setBackgroundColorAsync(
colorScheme === 'dark' ? Colors.dark.background : Colors.light.background
);
}, [colorScheme]);
return (
<>
>
);
}