Search code examples
javascriptreact-nativeshoutem

Shoutem change default fontFamily not work


im newbie in react native! I'm used shoutem/ui in my project. I have problem when modify default fontFamily. here is my code, please check then help me some solution to handle this. thanks so much guys.

const theme = _.merge(getTheme(), {
    defaultFont: {
        fontFamily: 'Rubik-Italic',
      },
    'shoutem.ui.NavigationBar': {
        '.clear': {
            container: {
                backgroundColor: params.primaryColor,
                borderBottomColor: 'transparent',
                position: 'relative',
            },
            'shoutem.ui.Title': {
                color: 'white',
                fontSize: 16,
            },
        },
        '.normal': {
            container: {
                position: 'relative'
            },
            'shoutem.ui.Button': {
                'shoutem.ui.Icon': {
                    color: params.colorTextAlpha,
                },
                'shoutem.ui.Text': {
                    color: params.colorTextAlpha,
                },
            },
            'shoutem.ui.Title': {
                color: params.colorText,
            },
        }
    },
    'shoutem.ui.Row': {
        '.fix': {
            paddingHorizontal: 10,
            paddingVertical: 10,
        }
    }
});


Solution

  • What you want to do is override the theme variables.

    Import the default theme variables and the getTheme function:

    import {
      getTheme,
      defaultThemeVariables,
    } from '@shoutem/ui';
    

    Then define your custom variables:

    const myThemeVariables = {
    ...defaultThemeVariables,
      title: {  fontFamily: 'MyFont' },
    };
    

    And then define your custom theme that uses those variables:

    const myTheme = getTheme(myThemeVariables);
    

    There is no more defaultFont setting you can override, so you'll have to be specific unfortunately.

    Furthermore, you have to import the StyleProvider:

    import { StyleProvider } from '@shoutem/theme';
    

    And use it to control the style of your components:

    render() {
        return (
          <StyleProvider style={myTheme}>
            // your components here
          </StyleProvider>
        );
      }
    }