Utilizando fontes com Expo

lucasm4sco

Lucas

Posted on February 16, 2023

Utilizando fontes com Expo

Nesse post usaremos de 3 pacotes:

  • expo-splash-screen: permite-nos manter a SplashScreen (tela de abertura) até terminarmos de carregar os recursos da aplicação;
  • expo-font: permite que utilizemos de fontes da web ou customizáveis em nossos componentes;
  • @expo-google-fonts/fonte-desejada: nos oferece cobertura para todas as fontes encontradas no Google Fonts.

vamos seguir então com suas instalações:

1- Iniciando projeto:

npx create-expo-app myProject
Enter fullscreen mode Exit fullscreen mode

2- Instalando expo-splash-screen:

npx expo install expo-splash-screen
Enter fullscreen mode Exit fullscreen mode

3- Instalando expo-font:

npx expo install expo-font
Enter fullscreen mode Exit fullscreen mode

4- Instalando @expo-google-fonts:

npx expo install @expo-google-fonts/poppins
Enter fullscreen mode Exit fullscreen mode

obs: o módulo @expo-google-fonts oferece suporte para várias outras fontes, basta que você coloque o nome da fonte desejada após o nome do pacote, você também pode encontrar uma lista com as fontes suportadas no seguinte repositório: Clique aqui. Nesse exemplo usaremos a Poppins.

Após a instalação dos módulos acrescente o seguinte código a raiz do seu projeto:

import * as SplashScreen from 'expo-splash-screen';

SplashScreen.preventAutoHideAsync();

export default function App() {
  // ...
}
Enter fullscreen mode Exit fullscreen mode

O método SplashScreen.preventAutoHideAsync() chamado acima, faz com que a tela de abertura da aplicação permaneça em execução até chamarmos o outro método SplashScreen.hideAsync() que nesse caso será chamado quando já estivermos com a fonte carregada.

Para organizar melhor nosso projeto podemos criar um Custom Hook que será encarregado de carregar as fontes e chamar o método que esconderá a tela de abertura, vamos chamá-lo de useLoadFonts:

  1. Crie uma pasta para os hooks do seu projeto;
  2. Crie um arquivo chamado useLoadFonts.js;
  3. Copie o seguinte código:
import { useCallback } from "react";
import * as SplashScreen from 'expo-splash-screen';
import { useFonts } from "expo-font";
import { Poppins_400Regular, Poppins_500Medium } from '@expo-google-fonts/poppins';

const useLoadFonts = () => {
    const [fontsLoaded] = useFonts({
        'Poppins_Regular': Poppins_400Regular,   
        'Poppins_Medium': Poppins_500Medium
      });

    const onLayoutRootView = useCallback(async () => {
        if (fontsLoaded) {
          await SplashScreen.hideAsync();
        }
    }, [fontsLoaded]);

    return { fontsLoaded, onLayoutRootView };
}

export default useLoadFonts;
Enter fullscreen mode Exit fullscreen mode

Caso deseje utilizar de fontes customizadas, basta trocar a linha da chamada do hook useFonts para uma estrutura semelhante à seguinte:

const [fontsLoaded] = useFonts({
    'Nome-Fonte': require('caminho_para_a_fonte')
  });
Enter fullscreen mode Exit fullscreen mode

Após isso basta importarmos o hook criado e utilizarmos na raiz do projeto, segue o exemplo:

import { Text, View } from 'react-native';
import * as SplashScreen from 'expo-splash-screen';
import useLoadFonts from './src/hooks/useLoadFonts';

SplashScreen.preventAutoHideAsync();

export default function App() {
  const { fontsLoaded, onLayoutRootView } = useLoadFonts();

  if(!fontsLoaded)
    return null;

  return (
    <View
      onLayout={onLayoutRootView}
    >
      // ...
    </View>
  );
}
Enter fullscreen mode Exit fullscreen mode

Agora a sua aplicação já deve ser capaz de utilizar dessa fonte e precisamos apenas passar da chave que colocamos no hook useFonts para o fontFamily do componente, ex:

<View
      onLayout={onLayoutRootView}
    >
      <Text
        style={{
          fontSize: 34,
          fontFamily: 'Poppins_Medium'
        }}
      >
        Hello world!
      </Text>
    </View>
Enter fullscreen mode Exit fullscreen mode
💖 💪 🙅 🚩
lucasm4sco
Lucas

Posted on February 16, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Utilizando fontes com Expo
expo Utilizando fontes com Expo

February 16, 2023

Ejecting from Expo
reactnative Ejecting from Expo

April 29, 2020