0

我正在尝试在我的项目中加载 fontello 图标,但是如果我尝试在 App.js 中加载,它会发送“false”并且应用程序不会加载:

import React, {useState} from "react";
import AppLoading from "expo-app-loading";
import { ThemeProvider } from "styled-components";
import theme from "./src/globalStyles/theme";

import Routes from "./src/routes";

import {
  useFonts,
  Roboto_400Regular,
  Roboto_500Medium,
  Roboto_700Bold,
} from "@expo-google-fonts/roboto";

import { Fontello } from "./assets/fonts/fontello.ttf";

export default function App() {
  const [fontsLoaded] = useFonts({
    Roboto_400Regular,
    Roboto_500Medium,
    Roboto_700Bold,
    Fontello,
  });
  console.log(fontsLoaded)
  if (!fontsLoaded) {
    return <AppLoading />;
  }

  return (
    <ThemeProvider theme={theme}>
      <Routes />
    </ThemeProvider>
  );
}

如果我用 Fontello 注释该行,它会加载应用程序,但出现以下错误:
fontFamily "fontello" 不是系统字体,尚未通过 Font.loadAsync 加载。

如果您打算使用系统字体,请确保您输入了正确的名称并且您的设备操作系统支持该名称。

如果这是自定义字体,请务必使用 Font.loadAsync 加载它。

4

1 回答 1

1

安装expo-font

expo install expo-font

创建一个名为hooksApp.js所在位置的文件夹。

hooks文件夹内创建一个名为useFonts.js粘贴此代码的文件

useFonts.js

import * as Font from 'expo-font';
import { Roboto_400Regular } from '@expo-google-fonts/roboto';

const useFonts = async () => {
  await Font.loadAsync({
    Roboto: Roboto_400Regular,
    Fontello: require('../assets/fonts/fontello.ttf'),
    // All Other Fonts
  });
};

export default useFonts;

然后在您App.js粘贴此代码

import React, { useState } from 'react';
import AppLoading from 'expo-app-loading';
import { ThemeProvider } from 'styled-components';

import theme from './src/globalStyles/theme';
import Routes from './src/routes';
import useFonts from './hooks/useFonts';

export default function App() {
  const [IsReady, setIsReady] = useState(false);

  const LoadFonts = async () => {
    await useFonts(); 
  };

  if (!IsReady) {
    return (
      <AppLoading
        startAsync={LoadFonts}
        onFinish={() => setIsReady(true)}
        onError={(error) => console.log(error)}
      />
    );
  }

   return (
     <ThemeProvider theme={theme}>
       <Routes />
     </ThemeProvider>
   );
}

工作示例适用于 Android。网页版中的一些错误。

于 2021-06-22T16:51:47.667 回答