1import { Entypo, Ionicons, MaterialIcons } from '@expo/vector-icons'; 2import { Assets as StackAssets } from '@react-navigation/stack'; 3import { Asset } from 'expo-asset'; 4import * as Font from 'expo-font'; 5import { Platform } from 'react-native'; 6 7import Icons from '../constants/Icons'; 8 9async function loadAssetsAsync() { 10 const iconRequires = Object.keys(Icons).map(key => Icons[key]); 11 12 const assetPromises: Promise<any>[] = [ 13 Asset.loadAsync(iconRequires), 14 Asset.loadAsync(StackAssets), 15 // @ts-ignore 16 Font.loadAsync(Ionicons.font), 17 // @ts-ignore 18 Font.loadAsync(Entypo.font), 19 // @ts-ignore 20 Font.loadAsync(MaterialIcons.font), 21 Font.loadAsync({ 22 'space-mono': require('../../assets/fonts/SpaceMono-Regular.ttf'), 23 }), 24 ]; 25 if (Platform.OS !== 'web') { 26 assetPromises.push( 27 Font.loadAsync({ 28 Roboto: 'https://github.com/google/fonts/raw/d1a2e0f/ofl/roboto/static/Roboto-Regular.ttf', 29 }) 30 ); 31 } 32 await Promise.all(assetPromises); 33} 34 35let oncePromise: Promise<void>; 36export default function loadAssetsAsyncOnce() { 37 oncePromise = oncePromise || loadAssetsAsync(); 38 return oncePromise; 39} 40