1import React, {useEffect} from 'react'; 2import {Image, StyleSheet} from 'react-native'; 3 4import {NavigationContainer} from '@react-navigation/native'; 5import {createNativeStackNavigator} from '@react-navigation/native-stack'; 6import bootstrap from './bootstrap'; 7import {RootStackParamList, routes} from './router'; 8import {Provider as PaperProvider} from 'react-native-paper'; 9import {GestureHandlerRootView} from 'react-native-gesture-handler'; 10import Dialogs from '@/components/dialogs'; 11import Toast from 'react-native-toast-message'; 12import Panels from '@/components/panels'; 13import {CustomTheme, DefaultTheme} from './theme'; 14import Config from '@/core/config'; 15import Share from '@/components/share'; 16import PageBackground from '@/components/base/pageBackground'; 17import {SafeAreaProvider} from 'react-native-safe-area-context'; 18 19/** 20 * 字体颜色 21 */ 22 23bootstrap(); 24const Stack = createNativeStackNavigator<RootStackParamList>(); 25 26export default function Pages() { 27 const themeName = Config.useConfig('setting.theme.mode') ?? 'dark'; 28 const themeColors = Config.useConfig('setting.theme.colors') ?? {}; 29 const theme = themeName.includes('dark') ? CustomTheme : DefaultTheme; 30 const isCustom = themeName.includes('custom') ? true : false; 31 const mergedTheme = isCustom 32 ? { 33 ...theme, 34 colors: { 35 ...theme.colors, 36 ...themeColors, 37 }, 38 } 39 : theme; 40 41 return ( 42 <GestureHandlerRootView style={{flex: 1}}> 43 <PaperProvider theme={mergedTheme}> 44 <SafeAreaProvider> 45 <NavigationContainer theme={mergedTheme}> 46 <PageBackground></PageBackground> 47 <Stack.Navigator 48 initialRouteName={routes[0].path} 49 screenOptions={{ 50 statusBarColor: 'transparent', 51 statusBarTranslucent: true, 52 headerShown: false, 53 animation: 'slide_from_right', 54 animationDuration: 200, 55 }}> 56 {routes.map(route => ( 57 <Stack.Screen 58 key={route.path} 59 name={route.path} 60 component={route.component}></Stack.Screen> 61 ))} 62 </Stack.Navigator> 63 64 <Panels></Panels> 65 <Dialogs></Dialogs> 66 <Share></Share> 67 <Toast></Toast> 68 </NavigationContainer> 69 </SafeAreaProvider> 70 </PaperProvider> 71 </GestureHandlerRootView> 72 ); 73} 74 75const style = StyleSheet.create({ 76 blur: { 77 width: '100%', 78 height: '100%', 79 position: 'absolute', 80 top: 0, 81 left: 0, 82 right: 0, 83 bottom: 0, 84 }, 85}); 86