import React, { useEffect, useState } from 'react'; import { StatusBar } from 'expo-status-bar'; import { NavigationContainer } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { ActivityIndicator, View, Text, TouchableOpacity } from 'react-native'; import DatabaseService from './src/services/DatabaseService'; import LoginScreen from './src/screens/LoginScreen'; import RegisterScreen from './src/screens/RegisterScreen'; import OnboardingScreen from './src/screens/OnboardingScreen'; import HomeScreen from './src/screens/HomeScreen'; const Stack = createNativeStackNavigator(); /** * App.js - Navigation Controller Only * * This component ONLY handles: * 1. Database initialization * 2. Navigation stack setup * 3. Routing to appropriate first screen * * NO DATA STORAGE OR DISPLAY HERE * All screens handle their own state and data */ function AppNavigator() { return ( {/* Authentication Stack - User not logged in */} {/* App Stack - User logged in */} ); } export default function App() { const [isReady, setIsReady] = useState(false); const [error, setError] = useState(null); useEffect(() => { initializeApp(); }, []); /** * Initialize database - only purpose of App.js useEffect * All other logic belongs in screen components */ const initializeApp = async () => { try { setError(null); await DatabaseService.initDatabase(); setIsReady(true); } catch (error) { console.error('Database initialization failed:', error); setError(error.message || 'Database initialization failed'); setIsReady(false); } }; // Show loading while database initializes if (!isReady && !error) { return ( ); } // Show error if database initialization fails if (error) { return ( {error} Retry ); } return ( <> ); }