import React, { useCallback, useEffect, useState } from "react"; import * as SplashScreen from "expo-splash-screen"; import * as Font from "expo-font"; import { Asset } from "expo-asset"; import { Block, GalioProvider } from "galio-framework"; import { NavigationContainer } from "@react-navigation/native"; import { Image } from "react-native"; import { Provider } from "react-redux"; import { NativeBaseProvider } from "native-base"; // Keep the splash screen visible while we fetch resources SplashScreen.preventAutoHideAsync(); // Before rendering any navigation stack import { enableScreens } from "react-native-screens"; enableScreens(); import Screens from "./navigation/Screens"; import { Images, articles, argonTheme } from "./constants"; import store from "./src/store"; import nativeBaseTheme from "./src/theme"; import { AuthProvider } from "./src/contexts/AuthContext"; // cache app images const assetImages = [ Images.Onboarding, Images.LogoOnboarding, Images.Logo, Images.Pro, Images.ArgonLogo, Images.iOSLogo, Images.androidLogo, ]; // cache product images articles.map((article) => assetImages.push(article.image)); function cacheImages(images) { return images.map((image) => { if (typeof image === "string") { return Image.prefetch(image); } else { return Asset.fromModule(image).downloadAsync(); } }); } export default function App() { const [appIsReady, setAppIsReady] = useState(false); useEffect(() => { async function prepare() { try { //Load Resources await _loadResourcesAsync(); // Pre-load fonts, make any API calls you need to do here await Font.loadAsync({ "open-sans-regular": require("./assets/font/OpenSans-Regular.ttf"), "open-sans-light": require("./assets/font/OpenSans-Light.ttf"), "open-sans-bold": require("./assets/font/OpenSans-Bold.ttf"), }); } catch (e) { console.warn(e); } finally { // Tell the application to render setAppIsReady(true); } } prepare(); }, []); const _loadResourcesAsync = async () => { return Promise.all([...cacheImages(assetImages)]); }; const onLayoutRootView = useCallback(async () => { if (appIsReady) { await SplashScreen.hideAsync(); } }, [appIsReady]); if (!appIsReady) { return null; } return ( ); }