Search code examples
reactjsreact-nativereact-navigationreact-navigation-v5

react native : There is way to do an haburger icon to open/close the sidebar menu and avatar for drawer?


there is way to do an hamburger icon to open/close the sidebar menu ? i try to do an icon that will open or close the side bar but i couldn't find how with react nav 5 . also i need to know how to put an avatar png into the drawer menu

import Settings from '../screens/Settings';
import Screen1 from '../screens/Screen1';
import Screen2 from '../screens/Screen2';
import Screen3 from '../screens/Screen3';

const Drawer = createDrawerNavigator();
const Stack = createStackNavigator();
const MaterialTopTabs = createMaterialTopTabNavigator();
const MaterialBottomTabs = createMaterialBottomTabNavigator();
const BottomTabs = createBottomTabNavigator();

const HomeStack = () => {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Screen1" component={Screen1} />
      <Stack.Screen name="Screen2" component={Screen2} />
      <Stack.Screen name="Screen3" component={Screen3} />
      <Stack.Screen name="Settings" component={Settings} />
    </Stack.Navigator>
  );
};

function CustomDrawerContent(props) {
  return (
    <DrawerContentScrollView {...props}>
      <DrawerItem
        label="Settings"
        onPress={() => props.navigation.navigate('Settings')}
        // activeTintColor="red"
        // inactiveTintColor="black"
        focused="true"
      />
    </DrawerContentScrollView>
  );
}

const AppNavigator = (props) => {
  return (
    <NavigationContainer>
      <Drawer.Navigator
        drawerContent={(props) => <CustomDrawerContent {...props} />}
      >
        <Drawer.Screen name="Home" component={HomeStack} />
      </Drawer.Navigator>
    </NavigationContainer>
  );
};
export default AppNavigator;


Solution

  • You will have to change your code like below.

    
       import Settings from '../screens/Settings';
    import Screen1 from '../screens/Screen1';
    import Screen2 from '../screens/Screen2';
    import Screen3 from '../screens/Screen3';
    
    const Drawer = createDrawerNavigator();
    const Stack = createStackNavigator();
    const MaterialTopTabs = createMaterialTopTabNavigator();
    const MaterialBottomTabs = createMaterialBottomTabNavigator();
    const BottomTabs = createBottomTabNavigator();
    
    const HomeStack = () => {
      return (
        <Stack.Navigator>
          <Stack.Screen name="Screen1" component={Screen1} />
          <Stack.Screen name="Screen2" component={Screen2} />
          <Stack.Screen name="Screen3" component={Screen3} />
          <Stack.Screen name="Settings" component={Settings} />
        </Stack.Navigator>
      );
    };
    
    function CustomDrawerContent(props) {
      return (
        <DrawerContentScrollView {...props}>
          <DrawerItem
            label="Settings"
            onPress={() => props.navigation.navigate('Settings')}
          />
        </DrawerContentScrollView>
      );
    }
    
    const AppNavigator = (props) => {
      return (
        <NavigationContainer>
          <Drawer.Navigator
            drawerContent={(props) => <CustomDrawerContent {...props} />}
          >
            <Drawer.Screen name="Home" component={HomeStack} />
          </Drawer.Navigator>
        </NavigationContainer>
      );
    };
    export default AppNavigator;
    

    This will nest the stack navigator inside the drawer navigator.