App.js 2.9 KB

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