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