healthapp
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

72 lines
2.0 KiB

import React, { useEffect, useState } from "react";
import { StatusBar } from "expo-status-bar";
import { PaperProvider } from "react-native-paper";
import { View, ActivityIndicator, StyleSheet } from "react-native";
import Navigation from "./src/navigation";
import { theme, colors } from "./src/theme";
import { useAuthStore } from "./src/stores/authStore";
import { useConstitutionStore } from "./src/stores/constitutionStore";
import { useChatStore } from "./src/stores/chatStore";
import { useSettingsStore } from "./src/stores/settingsStore";
import { AlertProvider } from "./src/components";
export default function App() {
const [isReady, setIsReady] = useState(false);
const initAuth = useAuthStore((state) => state.init);
const user = useAuthStore((state) => state.user);
const initConstitution = useConstitutionStore((state) => state.init);
const fetchConstitutionResult = useConstitutionStore(
(state) => state.fetchResult
);
const initChat = useChatStore((state) => state.init);
const initSettings = useSettingsStore((state) => state.init);
useEffect(() => {
async function init() {
try {
await Promise.all([
initAuth(),
initConstitution(),
initChat(),
initSettings(),
]);
} finally {
setIsReady(true);
}
}
init();
}, []);
// 登录状态变化时重新获取体质结果
useEffect(() => {
if (user) {
fetchConstitutionResult();
}
}, [user]);
if (!isReady) {
return (
<View style={styles.loading}>
<ActivityIndicator size="large" color={colors.primary} />
</View>
);
}
return (
<PaperProvider theme={theme}>
<AlertProvider>
<StatusBar style="auto" />
<Navigation />
</AlertProvider>
</PaperProvider>
);
}
const styles = StyleSheet.create({
loading: {
flex: 1,
justifyContent: "center",
alignItems: "center",
backgroundColor: colors.background,
},
});