This commit is contained in:
oneao committed 2025-11-02 22:08:05 +08:00
1 parent 1d6bb2b7f5
commit 458f0cd6ac
55 files changed
+1052 -999

No files matched your search

@@ -0,0 +1,65 @@
import type { ErrorBoundaryProps } from 'expo-router'
import { ToastProvider } from '@gluestack-ui/core/toast/creator'
import { useFonts } from 'expo-font'
import { Stack } from 'expo-router'
import * as SplashScreen from 'expo-splash-screen'
import { StatusBar } from 'expo-status-bar'
import { RefreshCw } from 'lucide-react-native'
import { useEffect } from 'react'
import { EmptyState } from '@/components/common/empty-status'
import { GluestackUIProvider } from '@/components/ui/gluestack-ui-provider'
import { ToastProviderWrapper } from '@/utils/toast'
import '@/styles/global.css'
import 'react-native-reanimated'
import 'react-native-gesture-handler'
SplashScreen.preventAutoHideAsync()
export function ErrorBoundary({ error, retry }: ErrorBoundaryProps) {
return (
<GluestackUIProvider>
<EmptyState
image={require('@/static/images/server-error.png')}
title="(´・ω・`) 出错啦~"
description={`发生了一点小问题:\n${error?.message || '请稍后再试'}`}
buttonText="重新加载"
buttonIcon={RefreshCw}
onButtonPress={retry}
/>
</GluestackUIProvider>
)
}
export default function RootLayout() {
const [loaded] = useFonts({
SpaceMono: require('@/static/fonts/SpaceMono-Regular.ttf'),
})
useEffect(() => {
if (loaded) {
SplashScreen.hideAsync()
}
}, [loaded])
return (
<GluestackUIProvider>
<ToastProvider>
<ToastProviderWrapper>
<Stack
screenOptions={{
headerTitleAlign: 'center',
animation: 'slide_from_right',
}}
>
<Stack.Screen
name="(tabs)"
options={{ headerShown: false }}
/>
<Stack.Screen name="+not-found" />
</Stack>
<StatusBar style="auto" />
</ToastProviderWrapper>
</ToastProvider>
</GluestackUIProvider>
)
}