App.js 2.8 KB

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