-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathApp.js
119 lines (108 loc) · 3.65 KB
/
App.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import React, { Component } from "react";
import { createBottomTabNavigator, createStackNavigator, createAppContainer } from "react-navigation";
import { createFluidNavigator } from "react-navigation-fluid-transitions";
import { Platform, Easing, Animated } from "react-native";
import HomeTabScreen from "./src/screens/HomeTabScreen";
import NotificationTabScreen from "./src/screens/NotificationTabScreen";
import ProfileTabScreen from "./src/screens/ProfileTabScreen";
import ImageViewScreen from "./src/screens/ImageViewScreen";
import AboutAppScreen from "./src/screens/AboutAppScreen";
import Ionicons from "react-native-vector-icons/Ionicons";
const iconSize = 26;
let SlideFromRight = (index, position, width) => {
const translateX = position.interpolate({
inputRange: [index - 1, index, index + 1],
outputRange: [width, 0, 0]
});
const slideFromRight = { transform: [{ translateX }] };
return slideFromRight;
};
const TransitionConfiguration = () => {
return {
transitionSpec: {
duration: 320,
easing: Easing.out(Easing.poly(4)),
timing: Animated.timing,
useNativeDriver: true
},
screenInterpolator: sceneProps => {
const { layout, position, scene } = sceneProps;
const width = layout.initWidth;
const { index, route } = scene;
const params = route.params || {}; // <- That's new
const transition = params.transition || "SlideFromRight"; // <- That's new
return {
SlideFromRight: SlideFromRight(index, position, width)
}[transition];
}
};
};
const TabStackNavigator = createBottomTabNavigator(
{
HomeTab: {
screen: HomeTabScreen,
navigationOptions: {
title: "Home",
tabBarIcon: ({ tintColor }) => {
return <Ionicons name={"ios-home"} size={24} color={tintColor} />;
}
}
},
NotificationTab: {
screen: NotificationTabScreen,
navigationOptions: {
title: "Notifications",
tabBarIcon: ({ tintColor }) => {
return <Ionicons name={"ios-notifications"} size={iconSize} color={tintColor} />;
}
}
},
ProfileTab: {
screen: ProfileTabScreen,
navigationOptions: {
title: "Profile",
tabBarIcon: ({ tintColor }) => {
return <Ionicons name={"ios-contact"} size={iconSize} color={tintColor} />;
}
}
}
},
{
initialRouteName: "HomeTab",
backBehavior: "initialRoute",
tabBarOptions: {
activeTintColor: "black",
showIcon: true,
showLabel: false,
style: {
backgroundColor: "white"
}
}
}
);
const AppStack = createStackNavigator(
{
TabStack: {
screen: TabStackNavigator
},
AboutAppScreen: {
screen: AboutAppScreen
}
},
{
initialRouteName: "TabStack",
headerMode: "none",
transitionConfig: Platform.OS === "android" ? TransitionConfiguration : ""
}
);
const AppContainer = createAppContainer(AppStack);
onNavigationStateChange = (prevState, newState, action) => {
console.log("prevState: ", prevState);
console.log("newState: ", newState);
console.log("action: ", action);
};
export default class App extends Component {
render() {
return <AppContainer onNavigationStateChange={this.onNavigationStateChange} />;
}
}