反应本机纸张主题,反应导航不起作用

Asi*_*man 3 react-native react-navigation react-native-paper

我是反应原生的新手。我正在使用 React Native Paper 为所有屏幕提供主题。我还使用反应导航堆栈导航器和抽屉导航器。首先,对于导航,纸张主题在导航组件中不起作用。但如果我不使用反应导航那么它就可以工作。

所以我尝试通过“withTheme”将主题从一个组件传递到另一个组件。但 withTheme 没有给我自定义主题道具。

这是我的 App.js

import { DefaultTheme,Provider as PaperProvider, Drawer, Avatar, withTheme } from 'react-native-paper';
import { createAppContainer,createSwitchNavigator } from 'react-navigation';
import { createDrawerNavigator } from 'react-navigation-drawer' 

const theme = {
  ...DefaultTheme,
  roundness: 8,
  colors: {
    ...DefaultTheme.colors,
    primary: '#ff0000',
    accent: '#000000',
    text: "#cc1111",
    background: "#000000",
    contained: '#000000'
  },
  dark: true
};

class App extends Component {

  render(){
      return(
        <PaperProvider theme={theme}>  
           <switchNavigator />
        </PaperProvider>
      )
  }
};

const switchNavigator = createSwitchNavigator({
  Login: Login,
  dranav: drawyerNavigator
},
{
  initialRouteName: "Login",

})
export default  createAppContainer(switchNavigator);
Run Code Online (Sandbox Code Playgroud)

这是我的login.js

class Login extends Component{
    state = {
       emailtext: '',
       passwordtext: ''
    };
    componentDidMount() {
        SplashScreen.hide();
    }
    render(){
       const {navigate} = this.props.navigation;
       const { colors } = this.props.theme;
       console.log({colors.accent})
   }

}
export default withTheme(Login)
Run Code Online (Sandbox Code Playgroud)

在我的 Login.js 中,我期望“colors.accent”给出我的自定义主题的值,例如这个值 - “#000000”。但它给了我=“#03DAC4”,这是强调的默认颜色,而不是我的自定义颜色。

我使用的是react-native版本0.61。请建议我做错了什么。还有一种更好的方法来通过导航传递反应本机纸张主题。我想要一个适用于所有屏幕的全局主题

谢谢

sat*_*164 5

您将开关导航器包装在组件中App,但不在任何地方使用它。您需要包装并导出容器:

const Navigation = createAppContainer(switchNavigator);

export default function App() {
  return(
    <PaperProvider theme={theme}>  
      <Navigation />
    </PaperProvider>
  )
}
Run Code Online (Sandbox Code Playgroud)