xref: /MusicFree/src/entry/index.tsx (revision 6704747af84cebd842b258efac7143542722fac5)
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