Skip to content

Commit d82a96a

Browse files
committed
feat: add Navigator,实现了底部导航栏和头部导航栏
1 parent 68aa520 commit d82a96a

File tree

16 files changed

+317
-79
lines changed

16 files changed

+317
-79
lines changed

App.tsx

Lines changed: 9 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,16 @@
1-
/**
2-
* App的入口文件,这里作为渲染系统入口和登录的一个占位
3-
* @format
1+
/*
2+
* @Author: bugdr
3+
* @Date: 2022-07-09 22:07:01
4+
* @LastEditors: bugdr
5+
* @LastEditTime: 2022-07-11 14:09:19
6+
* @FilePath: \SunOfBeacheRN\App.tsx
7+
* @Description:App的入口文件,这里作为渲染系统入口和登录的一个占位
48
*/
5-
6-
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
7-
import { NavigationContainer } from '@react-navigation/native';
8-
import { createNativeStackNavigator } from '@react-navigation/native-stack';
99
import React from 'react';
10-
import { Text, StyleSheet, View, Button } from 'react-native';
11-
import Ionicons from 'react-native-vector-icons/Ionicons';
12-
import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; // 安全区域的插件
13-
14-
function HomeScreen({ navigation }) {
15-
return (
16-
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
17-
<Text>首页</Text>
18-
<Button title="去登录页面" onPress={() => navigation.navigate('Login')} />
19-
</View>
20-
);
21-
}
22-
23-
function LoginScreen({ navigation }) {
24-
return (
25-
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
26-
<Text>登录页面</Text>
27-
<Button title="去首页" onPress={() => navigation.navigate('Home')} />
28-
</View>
29-
);
30-
}
31-
32-
// 创建一个路由栈
33-
const Stack = createNativeStackNavigator();
34-
// 底部导航栏
35-
const Tab = createBottomTabNavigator();
10+
import Navigation from './src/navigation';
3611

3712
const App = () => {
38-
return (
39-
<>
40-
<SafeAreaProvider style={styles.container}>
41-
<NavigationContainer>
42-
<Tab.Navigator
43-
screenOptions={({ route }) => ({
44-
tabBarIcon: ({ focused, color, size }) => {
45-
let iconName;
46-
47-
if (route.name === 'Home') {
48-
iconName = focused ? 'ios-information-circle' : 'ios-information-circle-outline';
49-
} else if (route.name === 'Login') {
50-
iconName = focused ? 'ios-list-box' : 'ios-list';
51-
}
52-
53-
// You can return any component that you like here!
54-
return <Ionicons name={iconName} size={size} color={color} />;
55-
},
56-
tabBarActiveTintColor: 'tomato',
57-
tabBarInactiveTintColor: 'gray',
58-
})}
59-
>
60-
<Tab.Screen name="Home" component={HomeScreen} options={{ tabBarBadge: 10 }} />
61-
<Tab.Screen name="Login" component={LoginScreen} />
62-
</Tab.Navigator>
63-
</NavigationContainer>
64-
</SafeAreaProvider>
65-
</>
66-
);
13+
return <Navigation />;
6714
};
6815

69-
const styles = StyleSheet.create({
70-
container: {
71-
flex: 1,
72-
},
73-
baseText: {
74-
fontFamily: 'Cochin',
75-
},
76-
titleText: {
77-
fontSize: 20,
78-
fontWeight: 'bold',
79-
},
80-
});
81-
8216
export default App;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* @Author: bugdr
3+
* @Date: 2022-07-11 12:30:23
4+
* @LastEditors: bugdr
5+
* @LastEditTime: 2022-07-11 13:34:59
6+
* @FilePath: \SunOfBeacheRN\src\navigation\BottomTabNavigator.tsx
7+
* @Description:标签底部导航器
8+
*/
9+
import React from 'react';
10+
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
11+
import CollegeScreen from '../screens/CollegeScreen';
12+
import FishCakesScreen from '../screens/FishCakesScreen';
13+
import HomeScreen from '../screens/HomeScreen'; // 首页
14+
import MineScreen from '../screens/MineScreen';
15+
import RoundQuestionScreen from '../screens/RoundQuestionScreen';
16+
17+
const BottomTab = createBottomTabNavigator();
18+
19+
const BottomTabNavigator = () => {
20+
return (
21+
<BottomTab.Navigator initialRouteName="首页">
22+
<BottomTab.Screen name="首页" component={HomeScreen} />
23+
<BottomTab.Screen name="摸鱼" component={FishCakesScreen} />
24+
<BottomTab.Screen name="问答" component={RoundQuestionScreen} />
25+
<BottomTab.Screen name="学院" component={CollegeScreen} />
26+
<BottomTab.Screen name="我的" component={MineScreen} />
27+
</BottomTab.Navigator>
28+
);
29+
};
30+
31+
export default BottomTabNavigator;

src/navigation/StackNavigator.tsx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* @Author: bugdr
3+
* @Date: 2022-07-11 12:30:53
4+
* @LastEditors: bugdr
5+
* @LastEditTime: 2022-07-11 14:12:48
6+
* @FilePath: \SunOfBeacheRN\src\navigation\StackNavigator.tsx
7+
* @Description:栈导航器,包括登录这些
8+
*/
9+
import React from 'react';
10+
import { createNativeStackNavigator } from '@react-navigation/native-stack';
11+
import BottomTabNavigator from './BottomTabNavigator';
12+
import Settings from '../views/Settings';
13+
14+
const Stack = createNativeStackNavigator();
15+
16+
const StackNavigator = () => {
17+
return (
18+
<>
19+
<Stack.Navigator initialRouteName="首页">
20+
<Stack.Screen name="首页" component={BottomTabNavigator} options={{ headerShown: false }} />
21+
<Stack.Screen name="设置" component={Settings} options={{ headerShown: false }} />
22+
</Stack.Navigator>
23+
</>
24+
);
25+
};
26+
27+
export default StackNavigator;

src/navigation/index.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* @Author: bugdr
3+
* @Date: 2022-07-10 21:15:11
4+
* @LastEditors: bugdr
5+
* @LastEditTime: 2022-07-11 14:08:51
6+
* @FilePath: \SunOfBeacheRN\src\navigation\index.tsx
7+
* @Description:这是用户使用的页面,不包含登录等页面
8+
*/
9+
import React from 'react';
10+
import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
11+
import { NavigationContainer } from '@react-navigation/native';
12+
import StackNavigator from './StackNavigator';
13+
14+
const Navigation = () => {
15+
return (
16+
<SafeAreaProvider initialMetrics={null}>
17+
<SafeAreaView
18+
style={{ flex: 1, backgroundColor: 'withe' }}
19+
edges={['top', 'bottom', 'right', 'left']}
20+
mode="padding"
21+
>
22+
<NavigationContainer>
23+
<StackNavigator />
24+
</NavigationContainer>
25+
</SafeAreaView>
26+
</SafeAreaProvider>
27+
);
28+
};
29+
30+
export default Navigation;

src/screens/CollegeScreen.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* @Author: bugdr
3+
* @Date: 2022-07-11 13:30:44
4+
* @LastEditors: bugdr
5+
* @LastEditTime: 2022-07-11 13:30:45
6+
* @FilePath: \SunOfBeacheRN\src\screens\CollegeScreen.tsx
7+
* @Description:学院模块
8+
*/
9+
import * as React from 'react';
10+
import { View, Text } from 'react-native';
11+
12+
const CollegeScreen = () => {
13+
return (
14+
<View>
15+
<Text>学院模块</Text>
16+
</View>
17+
);
18+
};
19+
20+
export default CollegeScreen;

src/screens/FishCakesScreen.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* @Author: bugdr
3+
* @Date: 2022-07-11 13:26:50
4+
* @LastEditors: bugdr
5+
* @LastEditTime: 2022-07-11 13:27:09
6+
* @FilePath: \SunOfBeacheRN\src\screens\FishCakesScreen.tsx
7+
* @Description:摸鱼模块
8+
*/
9+
import * as React from 'react';
10+
import { View, Text } from 'react-native';
11+
12+
const FishCakesScreen = () => {
13+
return (
14+
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
15+
<Text>摸鱼模块!</Text>
16+
</View>
17+
);
18+
};
19+
20+
export default FishCakesScreen;

src/screens/HomeScreen.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* @Author: bugdr
3+
* @Date: 2022-07-11 13:24:04
4+
* @LastEditors: bugdr
5+
* @LastEditTime: 2022-07-11 13:27:13
6+
* @FilePath: \SunOfBeacheRN\src\screens\HomeScreen.tsx
7+
* @Description:首页模块
8+
*/
9+
import * as React from 'react';
10+
import { View, Text } from 'react-native';
11+
12+
const HomeScreen = () => {
13+
return (
14+
<View>
15+
<Text>首页模块</Text>
16+
</View>
17+
);
18+
};
19+
20+
export default HomeScreen;

src/screens/MineScreen.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* @Author: bugdr
3+
* @Date: 2022-07-11 13:32:33
4+
* @LastEditors: bugdr
5+
* @LastEditTime: 2022-07-11 13:34:34
6+
* @FilePath: \SunOfBeacheRN\src\screens\MineScreen.tsx
7+
* @Description:我的模块
8+
*/
9+
import * as React from 'react';
10+
import { View, Text, Button } from 'react-native';
11+
12+
const MineScreen = ({ navigation }) => {
13+
return (
14+
<View>
15+
<Text>我的界面</Text>
16+
<Button title="Go to setting" onPress={() => navigation.navigate('设置')} />
17+
</View>
18+
);
19+
};
20+
21+
export default MineScreen;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* @Author: bugdr
3+
* @Date: 2022-07-11 13:29:44
4+
* @LastEditors: bugdr
5+
* @LastEditTime: 2022-07-11 13:29:46
6+
* @FilePath: \SunOfBeacheRN\src\screens\RoundQuestionScreen.tsx
7+
* @Description:问答模块
8+
*/
9+
import * as React from 'react';
10+
import { View, Text } from 'react-native';
11+
12+
const RoundQuestionScreen = () => {
13+
return (
14+
<View>
15+
<Text>问答模块</Text>
16+
</View>
17+
);
18+
};
19+
20+
export default RoundQuestionScreen;

src/screens/index.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* @Author: bugdr
3+
* @Date: 2022-07-11 07:04:43
4+
* @LastEditors: bugdr
5+
* @LastEditTime: 2022-07-11 13:17:02
6+
* @FilePath: \SunOfBeacheRN\src\screens\index.ts
7+
* @Description:路由文件
8+
*/
9+
// 这里不在使用解析模块路径。因为没有必要使用
10+
// 获取到导航栏路由
11+
export const StacksScreens = [];
12+
13+
// 底部导航标题
14+
export const BottomScreens = [
15+
{
16+
name: '',
17+
},
18+
];

0 commit comments

Comments
 (0)