App.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import * as React from 'react';
  2. import { StatusBar, Platform, StyleSheet, View } from 'react-native';
  3. import { NavigationContainer, CommonActions } from '@react-navigation/native';
  4. import {
  5. createStackNavigator,
  6. CardStyleInterpolators,
  7. } from '@react-navigation/stack';
  8. import { ScrollView } from 'react-native-gesture-handler';
  9. import { UseAPIProvider } from '@umijs/use-request';
  10. import { Provider as PaperProvider } from 'react-native-paper';
  11. import { Provider } from '@ant-design/react-native';
  12. import { ThemeProvider } from 'react-native-magnus';
  13. import useModel from 'flooks';
  14. import { useUpdateEffect } from '@umijs/hooks';
  15. import { navigationRef } from './navigation/RootNavigation';
  16. import useCachedResources from './hooks/useCachedResources';
  17. import BottomTabNavigator from './navigation/BottomTabNavigator';
  18. import BasicScreens from './navigation/BaseNavigator';
  19. import words from './flooks/Words';
  20. import Toast from './flooks/Toast';
  21. import user from './flooks/User';
  22. import request from './Utils/RequestUtils';
  23. import theme from './constants/Theme';
  24. import ThemeMagnus from './constants/ThemeMagnus';
  25. const Stack = createStackNavigator();
  26. export default function App() {
  27. const isLoadingComplete = useCachedResources();
  28. // 初始化 Toast
  29. useModel(Toast, []);
  30. const { wordsInit, local } = useModel(words, ['local']);
  31. // Load words local语言转变,切换语言
  32. React.useEffect(() => {
  33. wordsInit();
  34. }, [local]);
  35. const { id } = useModel(user, ['id']);
  36. useUpdateEffect(() => {
  37. let initName = '';
  38. if (id === 0) {
  39. // 未登录
  40. initName = 'Login';
  41. } else if (id !== null) {
  42. // 已登录
  43. initName = 'Home';
  44. }
  45. if (initName) {
  46. navigationRef.current.dispatch(
  47. CommonActions.reset({
  48. index: 0,
  49. routes: [
  50. {
  51. name: initName,
  52. // name: 'MerchantDetail',
  53. // name: 'Cooperation',
  54. },
  55. ],
  56. })
  57. );
  58. }
  59. }, [id]);
  60. if (!isLoadingComplete) {
  61. return null;
  62. } else {
  63. return (
  64. <View style={styles.container}>
  65. <ThemeProvider theme={ThemeMagnus}>
  66. <Provider>
  67. <PaperProvider theme={theme}>
  68. {Platform.OS !== 'ios' && (
  69. <StatusBar translucent={false} backgroundColor="#FFC21C" />
  70. )}
  71. <UseAPIProvider
  72. value={{
  73. requestMethod: request,
  74. }}
  75. >
  76. <NavigationContainer ref={navigationRef}>
  77. <Stack.Navigator
  78. initRouteName="InitApp"
  79. screenOptions={{
  80. headerShown: false,
  81. cardOverlayEnabled: true,
  82. cardStyle: { backgroundColor: '#eee', flex: 1 },
  83. contentStyle: { backgroundColor: '#eee', flex: 1 },
  84. gestureEnabled: true,
  85. stackPresentation: 'push',
  86. cardStyleInterpolator:
  87. CardStyleInterpolators.forHorizontalIOS,
  88. }}
  89. >
  90. {/* 基础功能页面 */}
  91. {BasicScreens(Stack.Screen)}
  92. <Stack.Screen name="Home" component={BottomTabNavigator} />
  93. </Stack.Navigator>
  94. </NavigationContainer>
  95. </UseAPIProvider>
  96. </PaperProvider>
  97. </Provider>
  98. </ThemeProvider>
  99. </View>
  100. );
  101. }
  102. }
  103. const styles = StyleSheet.create({
  104. container: {
  105. flex: 1,
  106. backgroundColor: '#fff',
  107. },
  108. });