index.tsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import {
  2. NavigationContainer,
  3. DefaultTheme,
  4. DarkTheme,
  5. CommonActions,
  6. } from '@react-navigation/native';
  7. import {
  8. createStackNavigator,
  9. CardStyleInterpolators,
  10. } from '@react-navigation/stack';
  11. import * as React from 'react';
  12. import { ColorSchemeName } from 'react-native';
  13. import { useTranslation } from 'react-i18next';
  14. import useModel from 'flooks';
  15. //弹窗模块
  16. import AlertModalScreen from '../modals/AlertModalScreen';
  17. import ModalStackNavigator from './ModalStackNavigator';
  18. //登录模块堆栈
  19. import LoginStackNavigator from './LoginStackNavigator';
  20. //首页堆栈
  21. import MainTabNavigator from './MianTabNavigator';
  22. //我的模块堆栈
  23. import MineStackNavigator from './MineStackNavigator';
  24. import OrderStackNavigator from './OrderStackNavigator';
  25. import NoticeStackNavigator from './NoticeStackNavigator';
  26. import { useCreation } from 'ahooks';
  27. import { RootStackParamList } from '../types';
  28. import LinkingConfiguration from './LinkingConfiguration';
  29. import User from '../stores/User';
  30. export default function Navigation({
  31. colorScheme,
  32. }: {
  33. colorScheme: ColorSchemeName;
  34. }) {
  35. const { initialRouteName } = useModel(User, ['initialRouteName']);
  36. const navRef = React.useRef();
  37. const initRoute = useCreation(() => {
  38. // if (__DEV__) {
  39. // return {
  40. // name: 'Modal',
  41. // screen:'OrderDetail'
  42. // };
  43. // } else {
  44. return {
  45. name: initialRouteName !== 'MainStack' ? 'LoginStack' : initialRouteName,
  46. screen: initialRouteName !== 'MainStack' ? initialRouteName : 'Order',
  47. };
  48. // }
  49. }, [__DEV__, initialRouteName]);
  50. React.useEffect(() => {
  51. if (navRef.current) {
  52. navRef.current.dispatch(
  53. CommonActions.reset({
  54. index: 0,
  55. routes: [
  56. {
  57. name: initRoute.name,
  58. screen: initRoute.screen,
  59. },
  60. ],
  61. })
  62. );
  63. }
  64. }, [navRef, initRoute]);
  65. return (
  66. <NavigationContainer
  67. ref={navRef}
  68. linking={LinkingConfiguration}
  69. theme={colorScheme === 'dark' ? DarkTheme : DefaultTheme}
  70. >
  71. <RootNavigator initRoute={initRoute} />
  72. </NavigationContainer>
  73. );
  74. }
  75. const Stack = createStackNavigator<RootStackParamList>();
  76. function RootNavigator({ initRoute }) {
  77. const { t } = useTranslation();
  78. return (
  79. <Stack.Navigator
  80. initialRouteName={initRoute.name}
  81. screenOptions={{
  82. stackPresentation: 'push',
  83. headerShown: false,
  84. }}
  85. >
  86. <Stack.Screen
  87. name="LoginStack"
  88. component={LoginStackNavigator}
  89. options={{
  90. cardStyleInterpolator: CardStyleInterpolators.forHorizontalIOS,
  91. }}
  92. />
  93. <Stack.Screen
  94. name="MainStack"
  95. component={MainTabNavigator}
  96. options={{
  97. cardStyleInterpolator: CardStyleInterpolators.forHorizontalIOS,
  98. }}
  99. />
  100. <Stack.Screen
  101. name="MineStack"
  102. component={MineStackNavigator}
  103. options={{
  104. cardStyleInterpolator: CardStyleInterpolators.forHorizontalIOS,
  105. }}
  106. />
  107. <Stack.Screen
  108. name="NoticeStack"
  109. component={NoticeStackNavigator}
  110. options={{
  111. cardStyleInterpolator: CardStyleInterpolators.forHorizontalIOS,
  112. }}
  113. />
  114. <Stack.Screen
  115. name="OrderStack"
  116. component={OrderStackNavigator}
  117. options={{
  118. cardStyleInterpolator: CardStyleInterpolators.forHorizontalIOS,
  119. }}
  120. />
  121. <Stack.Screen
  122. name="Modal"
  123. mode="modals"
  124. component={ModalStackNavigator}
  125. options={{
  126. cardStyle: { backgroundColor: 'transparent' },
  127. animationEnabled: false,
  128. }}
  129. />
  130. </Stack.Navigator>
  131. );
  132. }