xref: /MusicFree/src/entry/index.tsx (revision d84e0f28a520cbaefef752f0fc28e0378e11f72d)
1import React 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';
15
16// todo: load config
17/**
18 * 字体颜色
19 */
20
21bootstrap();
22const Stack = createNativeStackNavigator();
23
24export default function Pages() {
25  const background = useConfig('setting.theme.background');
26  const theme = useConfig('setting.theme.mode') ?? 'dark';
27
28  return (
29    <GestureHandlerRootView style={{flex: 1}}>
30      <PaperProvider theme={theme === 'dark'? CustomTheme : DefaultTheme}>
31        <NavigationContainer theme={theme === 'dark'? CustomTheme : DefaultTheme}>
32          <Image
33            style={style.blur}
34            blurRadius={15}
35            source={
36              background
37                ? {
38                    uri: background,
39                  }
40                : require('@/assets/imgs/background.jpg')
41            }></Image>
42
43          <Stack.Navigator
44            initialRouteName={routes[0].path}
45            screenOptions={{
46              statusBarColor: 'transparent',
47              statusBarTranslucent: true,
48              headerShown: false,
49              animation: 'slide_from_right',
50              animationDuration: 200,
51            }}>
52            {routes.map(route => (
53              <Stack.Screen
54                key={route.path}
55                name={route.path}
56                component={route.component}></Stack.Screen>
57            ))}
58          </Stack.Navigator>
59
60          <Panels></Panels>
61          <Dialogs></Dialogs>
62          <Toast></Toast>
63        </NavigationContainer>
64      </PaperProvider>
65    </GestureHandlerRootView>
66  );
67}
68
69const style = StyleSheet.create({
70  blur: {
71    width: '100%',
72    height: '100%',
73    position: 'absolute',
74    top: 0,
75    left: 0,
76    right: 0,
77    bottom: 0,
78  },
79});
80