xref: /MusicFree/src/entry/index.tsx (revision 1c06c79946b30f194df132a91b10963b5dd338bc)
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 {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, DarkTheme, DefaultTheme} from './theme';
14import {useConfig} from '@/common/localConfigManager';
15import Share from '@/components/share';
16import RNBootSplash from 'react-native-bootsplash';
17import logManager from '@/common/logManager';
18import PageBackground from '@/components/pageBackground';
19import {SafeAreaProvider} from 'react-native-safe-area-context';
20
21/**
22 * 字体颜色
23 */
24
25bootstrap();
26const Stack = createNativeStackNavigator();
27
28export default function Pages() {
29  const themeName = useConfig('setting.theme.mode') ?? 'dark';
30  const themeColors = useConfig('setting.theme.colors') ?? {};
31  const theme = themeName === 'dark' ? CustomTheme : DefaultTheme;
32  const mergedTheme = {
33    ...theme,
34    colors: {
35      ...theme.colors,
36      ...themeColors,
37    },
38  };
39  useEffect(() => {
40    if (__DEV__) {
41      RNBootSplash.hide({fade: true});
42      logManager.error('TEST');
43    }
44  }, []);
45
46  return (
47    <GestureHandlerRootView style={{flex: 1}}>
48      <PaperProvider theme={mergedTheme}>
49        <SafeAreaProvider>
50          <NavigationContainer theme={mergedTheme}>
51            <PageBackground></PageBackground>
52            <Stack.Navigator
53              initialRouteName={routes[0].path}
54              screenOptions={{
55                statusBarColor: 'transparent',
56                statusBarTranslucent: true,
57                headerShown: false,
58                animation: 'slide_from_right',
59                animationDuration: 200,
60              }}>
61              {routes.map(route => (
62                <Stack.Screen
63                  key={route.path}
64                  name={route.path}
65                  component={route.component}></Stack.Screen>
66              ))}
67            </Stack.Navigator>
68
69            <Panels></Panels>
70            <Dialogs></Dialogs>
71            <Share></Share>
72            <Toast></Toast>
73          </NavigationContainer>
74        </SafeAreaProvider>
75      </PaperProvider>
76    </GestureHandlerRootView>
77  );
78}
79
80const style = StyleSheet.create({
81  blur: {
82    width: '100%',
83    height: '100%',
84    position: 'absolute',
85    top: 0,
86    left: 0,
87    right: 0,
88    bottom: 0,
89  },
90});
91