This commit is contained in:
oneao committed 2026-01-13 22:18:01 +08:00
1 parent 6277fb2f9e
commit 8ecac0d7dd
270 files changed
+40438 -529

No files matched your search

+99
View File
@@ -0,0 +1,99 @@
import type { ErrorBoundaryProps } from 'expo-router'
import { ToastProvider } from '@gluestack-ui/core/toast/creator'
import { useFonts } from 'expo-font'
import { Stack, usePathname } from 'expo-router'
import * as SplashScreen from 'expo-splash-screen'
import { StatusBar } from 'expo-status-bar'
import { useEffect } from 'react'
import { GestureHandlerRootView } from 'react-native-gesture-handler'
import { KeyboardProvider } from 'react-native-keyboard-controller'
import { MenuProvider } from 'react-native-popup-menu'
import { AButton } from '@/components/common/ao'
import EmptyState from '@/components/common/EmptyStatus'
import { GluestackUIProvider } from '@/components/ui/gluestack-ui-provider'
import { useAppStore } from '@/store/app'
import { useNavStore } from '@/store/navigation'
import { ToastProviderWrapper } from '@/utils/toast'
import '@/styles/global.css'
import 'react-native-reanimated'
SplashScreen.preventAutoHideAsync()
export const unstable_settings = {
initialRouteName: 'money',
}
export function ErrorBoundary({ error, retry }: ErrorBoundaryProps) {
return (
<GluestackUIProvider>
<EmptyState
type="error"
title="(´・ω・`) 出错啦~"
description={`发生了一点小问题:\n${error?.message || '请稍后再试'}`}
footer={(
<AButton onPress={retry} leftIcon={{ icon: 'RotateCcw', size: 18, color: '#fff' }}>
再试一下
</AButton>
)}
/>
</GluestackUIProvider>
)
}
export default function RootLayout() {
const pathname = usePathname()
const navStore = useNavStore()
const appStore = useAppStore()
const [fontsLoaded] = useFonts({
SpaceMono: require('@/static/fonts/SpaceMono-Regular.ttf'),
})
useEffect(() => {
navStore.setPathname(pathname)
}, [pathname])
useEffect(() => {
if (!fontsLoaded)
return
appStore.init().finally(() => {
SplashScreen.hideAsync()
})
}, [fontsLoaded])
return (
<MenuProvider>
<KeyboardProvider>
<GluestackUIProvider>
<ToastProvider>
<ToastProviderWrapper>
<GestureHandlerRootView>
<Stack
screenOptions={{
headerTitleAlign: 'center',
animation: 'slide_from_right',
contentStyle: {
backgroundColor: '#fff',
},
}}
>
<Stack.Screen
name="(tabs)"
options={{
headerShown: false,
}}
/>
<Stack.Screen name="+not-found" />
</Stack>
<StatusBar style="auto" />
</GestureHandlerRootView>
</ToastProviderWrapper>
</ToastProvider>
</GluestackUIProvider>
</KeyboardProvider>
</MenuProvider>
)
}