Я пытаюсь использовать шрифт 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"]
},
Font.loadAsync
с помощью try/catch и распечатать ошибку. Также не забудьте добавить ttf к вашемуpackagerOpts.assetExts
вapp.json
???? - person Evan Bacon   schedule 07.02.2018packagerOpts.assetExts
? в документах про это ничего не видел - person Phil Mok   schedule 07.02.2018