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