// Import global CSS file
import '../../global.css';
import { BottomSheetModalProvider } from '@gorhom/bottom-sheet';
import { ThemeProvider } from '@react-navigation/native';
import { Stack } from 'expo-router';
import * as SplashScreen from 'expo-splash-screen';
import React, { useCallback, useEffect, useState } from 'react';
import { StyleSheet } from 'react-native';
import FlashMessage from 'react-native-flash-message';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { KeyboardProvider } from 'react-native-keyboard-controller';
import * as Font from 'expo-font';
import { APIProvider } from '@/api';
import { hydrateAuth, loadSelectedTheme } from '@/lib';
// import { useThemeConfig } from '@/lib/use-theme-config';
import { PaperProvider } from 'react-native-paper';
export { ErrorBoundary } from 'expo-router';
export const unstable_settings = {
initialRouteName: '(app)',
};
hydrateAuth();
loadSelectedTheme();
export default function RootLayout() {
const [fontsLoaded, setFontsLoaded] = useState(false);
const loadFonts = async () => {
await Font.loadAsync({
pretendard100: require('../../assets/fonts/Pretendard-Thin.otf'),
pretendard200: require('../../assets/fonts/Pretendard-ExtraLight.otf'),
pretendard300: require('../../assets/fonts/Pretendard-Light.otf'),
pretendard400: require('../../assets/fonts/Pretendard-Regular.otf'),
pretendard500: require('../../assets/fonts/Pretendard-Medium.otf'),
pretendard600: require('../../assets/fonts/Pretendard-SemiBold.otf'),
pretendard700: require('../../assets/fonts/Pretendard-Bold.otf'),
pretendard800: require('../../assets/fonts/Pretendard-ExtraBold.otf'),
pretendard900: require('../../assets/fonts/Pretendard-Black.otf'),
Inter: require('../../assets/fonts/Inter.ttf'),
});
setFontsLoaded(true);
};
useEffect(() => {
const prepare = async () => {
try {
await SplashScreen.preventAutoHideAsync();
await loadFonts();
} catch (e) {
console.warn(e);
} finally {
console.log('prepare =====');
setFontsLoaded(true);
}
};
prepare();
}, []);
const onLayoutRootView = useCallback(async () => {
if (fontsLoaded) {
await SplashScreen.hideAsync();
}
}, [fontsLoaded]);
if (!fontsLoaded) {
return null; // 스플래시 화면이 유지됩니다.
}
return (
);
}
function Providers({ children }: { children: React.ReactNode }) {
// const theme = useThemeConfig();
return (
{children}
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
});