import { useState, useEffect } from 'react'; import { View, ActivityIndicator, Text, StyleSheet } from 'react-native'; import { initDatabase, getGitHubToken } from './services/database'; import TokenInput from './components/TokenInput'; import HomeScreen from './screens/HomeScreen'; import SettingsScreen from './screens/SettingsScreen'; import RepoDetailScreen from './screens/RepoDetailScreen'; import CategoryManageScreen from './screens/CategoryManageScreen'; export default function App() { // 当前显示的页面:loading / token_input / home / settings / repo_detail / category_manage const [screen, setScreen] = useState('loading'); const [selectedRepo, setSelectedRepo] = useState(null); // 启动时检查是否已存在 Token,决定进入首页或 Token 输入页 useEffect(() => { checkToken(); }, []); const checkToken = async () => { try { await initDatabase(); const token = await getGitHubToken(); setScreen(token ? 'home' : 'token_input'); } catch (e) { console.error('初始化失败:', e); setScreen('token_input'); } }; const handleTokenSaved = () => { setScreen('home'); }; const handleTokenExpired = () => { setScreen('token_input'); }; const handleOpenRepoDetail = (repo) => { setSelectedRepo(repo); setScreen('repo_detail'); }; const handleCloseRepoDetail = () => { setSelectedRepo(null); setScreen('home'); }; // 根据 screen 状态渲染对应页面 if (screen === 'loading') { return ( 启动中... ); } if (screen === 'token_input') { return ; } if (screen === 'settings') { return ( setScreen('home')} onTokenExpired={handleTokenExpired} /> ); } if (screen === 'repo_detail' && selectedRepo) { return ( ); } if (screen === 'category_manage') { return ( setScreen('home')} /> ); } return ( setScreen('settings')} onOpenRepoDetail={handleOpenRepoDetail} onOpenCategoryManage={() => setScreen('category_manage')} /> ); } const styles = StyleSheet.create({ center: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#f5f5f5', }, loadingText: { marginTop: 10, color: '#888', fontSize: 14, }, });