App.js 2.7 KB

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