import { DarkTheme, DefaultTheme, ThemeProvider } from "@react-navigation/native"; import { useFonts } from "expo-font"; import { Stack } from "expo-router"; import * as SplashScreen from "expo-splash-screen"; import { useEffect } from "react"; import { Platform } from "react-native"; import Toast from "react-native-toast-message"; import { useSettingsStore } from "@/stores/settingsStore"; import { useRemoteControlStore } from "@/stores/remoteControlStore"; import LoginModal from "@/components/LoginModal"; import useAuthStore from "@/stores/authStore"; // Prevent the splash screen from auto-hiding before asset loading is complete. SplashScreen.preventAutoHideAsync(); export default function RootLayout() { const colorScheme = "dark"; const [loaded, error] = useFonts({ SpaceMono: require("../assets/fonts/SpaceMono-Regular.ttf"), }); const { loadSettings, remoteInputEnabled, apiBaseUrl } = useSettingsStore(); const { startServer, stopServer } = useRemoteControlStore(); const { checkLoginStatus } = useAuthStore(); useEffect(() => { loadSettings(); }, [loadSettings]); useEffect(() => { if (apiBaseUrl) { checkLoginStatus(apiBaseUrl); } }, [apiBaseUrl, checkLoginStatus]); useEffect(() => { if (loaded || error) { SplashScreen.hideAsync(); if (error) { console.warn(`Error in loading fonts: ${error}`); } } }, [loaded, error]); useEffect(() => { if (remoteInputEnabled) { startServer(); } else { stopServer(); } }, [remoteInputEnabled, startServer, stopServer]); if (!loaded && !error) { return null; } return ( {Platform.OS !== "web" && } ); }