Curved Navigation Bar
Hight performance animated bottom navigation bar for both Android and IOS 😎.
Table of Contents
- Installation
- Usage
- Props
- Credits
- License
Installation
yarn add curved-navigation-bar
npm install curved-navigation-bar
Also, you need to install react-native-reanimated, react-native-gesture-handler & react-native-svg, and follow theirs installation instructions.
Usage
React Navigation v5
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import AnimatedTabBar, {TabsConfigsType} from '@hngocl/curved-navigation-bar';
import {SafeAreaProvider} from 'react-native-safe-area-context';
const tabs: TabsConfigsType = {
Home: {
icon: ({ progress }) =>
},
Profile: {
icon: ({ progress }) =>
},
}
const Tab = createBottomTabNavigator();
export default function App() {
return (
<SafeAreaProvider>
<NavigationContainer>
<Tab.Navigator
tabBar={props => (
<AnimatedTabBar tabs={tabs} {...props} />
)}
>
<Tab.Screen
name="Home"
component={HomeScreen}
/>
<Tab.Screen
name="Profile"
component={ProfileScreen}
/>
</Tab.Navigator>
</NavigationContainer>
</SafeAreaProvider>
)
}
React Navigation v4
import React from 'react';
import {createAppContainer} from 'react-navigation';
import {createBottomTabNavigator} from 'react-navigation-tabs';
import {createStackNavigator} from 'react-navigation-stack';
import {SafeAreaProvider} from 'react-native-safe-area-context';
import AnimatedTabBar, {TabsConfigsType} from '@hngocl/curved-navigation-bar';
const tabs: TabsConfigsType = {
Home: {
icon: ({ progress }) =>
},
Profile: {
icon: ({ progress }) =>
},
}
const TabNavigator = createBottomTabNavigator(
{
Home: HomeScreen,
Profile: ProfileScreen,
},
{
tabBarComponent: props => <AnimatedTabBar tabs={tabs} {...props} />,
},
);
const AppContainer = createAppContainer(TabNavigator);
export default () => (
<SafeAreaProvider>
<AppContainer />
</SafeAreaProvider>
);
Animated Icon
In order to animate the tab icon color, you will need to use the provded prop color
that will be provided to the icon.
This example below should explain it better:
import React from 'react';
import Animated from 'react-native-reanimated';
interface AnimatedIconProps {
progress: Animated.Node<number>;
}
const AnimatedIcon = ({ progress }: AnimatedIconProps) => {
return (
);
};
export default AnimatedIcon;
Props
name | required | default | description |
---|
duration | NO | 500 | Duration for the tabs animation. |
barColor | NO | #FFFFFF | background color of bottom bar. |
tabs | YES | | A dictionary for all tabs configurations, check TabConfigsType interface. |
sizeDot | NO | 60 | Size of dot. |
dotColor | NO | #FFFFFF | Color of dot. |
TabConfigsType
name | required | default | description |
---|
icon | YES | | Component to be render as tab icon, it will recevie an animated node prop progress . |
Built With
License
MIT