React Native не может использовать собственный шрифт с Expo Font.loadAsync

Я пытаюсь использовать шрифт Google в своем приложении и следую документации здесь не повезло. Я скачал шрифт и использовал файловую структуру, рекомендованную Expo. Документы говорят использовать async componentDidMount, что вы можете видеть в приведенном ниже коде. Я видел, как другие люди успешно использовали async componentWillMount, но у меня это не сработало.

Сообщение об ошибке, которое я получаю:

console.error: "fontFamily 'anton-regular' is not a system font and has not been loaded through Expo.Font.LoadAsync."

Мой console.log fonts loaded: true появляется в удаленном отладчике прямо перед тем, как я получаю ошибку шрифта.

import React, { Component } from 'react';
import { Font } from 'expo';
import...

class App extends Component {
  constructor(props) {
    super(props);
    this.state = { fontLoaded: false };
  }

  async componentDidMount() {
    try {
      await Font.loadAsync({
        'anton-regular': require('./assets/fonts/Anton-Regular.ttf'),
      });
      this.setState({ fontLoaded: true });
      console.log('fonts are loaded');
    } catch (error) {
      console.log(error);
    }
  }

  render() {
    if (this.state.fontLoaded) {
      console.log('fonts loaded: ', this.state.fontLoaded)
      return (
        <Root>
          <Provider store={store}>
            <AppWithNavigationState />
          </Provider>
        </Root>
      );
    }
    return (
      <Root>
        <LoadingScreen />
      </Root>
    );
  }
}

ИЗМЕНИТЬ

По предложению Эвана Бэкона я обернул Font.loadAsyc в try/catch, но ошибки не было обнаружено. Я также добавил следующее в свой app.json без изменений.

 "packagerOpts": {
   "assetExts": ["ttf"]
 },

person Phil Mok    schedule 07.02.2018    source источник
comment
Я подозреваю, что шрифт не загружается, можете ли вы обернуть Font.loadAsync с помощью try/catch и распечатать ошибку. Также не забудьте добавить ttf к вашему packagerOpts.assetExts в app.json ????   -  person Evan Bacon    schedule 07.02.2018
comment
@EvanBacon, что насчет packagerOpts.assetExts? в документах про это ничего не видел   -  person Phil Mok    schedule 07.02.2018
comment
в expo вам нужно определить все расширения активов в app.json. ttf может быть одним из предопределенных, но в закуске он экспортируется вместе с ним в app.json.   -  person Evan Bacon    schedule 07.02.2018
comment
@EvanBacon только что обновил вопрос с вашими предложениями. Все еще не повезло   -  person Phil Mok    schedule 07.02.2018


Ответы (1)


Наконец-то разобрался. Оказывается, у меня был конечный пробел в одном из мест, где я использовал шрифт, например:

<Text style={{ fontFamily: 'anton-regular ' }}>I'm dumb.</Text>

Интересно, я могу удалить это из app.json

"packagerOpts": {
  "assetExts": ["ttf"]
},

И шрифт до сих пор работает.

person Phil Mok    schedule 07.02.2018