jagath-jaikumar / RN-FB-Template

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Template Bottom tabs with auth flow

Template starter with React Navigation Bottom Tabs and Firebase auth using React Context

Installation

  1. Install node.js

  2. Install Expo

    npm install --global expo-cli
  3. Download this repo

  4. Install deps on your template folder

    npm install
  5. Start the environtment

    expo start

Auth Flow

Usage

  • Set up a new firebase project

  • Go to Authentication and under Sign-in Method enable Email/Password

  • Fill this firebase config to your config inside ./navigation/AppNavigator.js

    ```jsx
    const firebaseConfig = {
    	apiKey: '',
    	authDomain: '',
    	databaseURL: '',
    	projectId: '',
    	storageBucket: '',
    	messagingSenderId: '',
    	appId: '',
    };
    ```
    

    and you good to go!

Prebuilt UI Screens

There are 3 screens included inside ./screens/auth and one more thing its included with the firebase auth function, so you don't need to create the function. The ilustrations I use undraw

  • Login screen ./screens/auth/login.js
  • Register screen ./screens/auth/register.js
  • Forget password screen ./screens/auth/forget.js

I personally use these screens on my project TiktTeng in early stages before the redesign, feel free to use these screens ❤️

React Navigation Auth Flow

The checking logged users process is inside ./provider/AuthProvider I use React Context, you can add more functions like get the data of the user and store it to the context (better static data, ex: uid)

Inside the navigator ./navigation/AppNavigator.js There's 2 stack navigator :

  • <Auth/> → for not logged in users stack
  • <Main/> → for logged in users stack
  • <Loading/> → for loading screen
export default () => {
	const auth = useContext(AuthContext);
	const user = auth.user;
	return (
		<NavigationContainer>
			{user == null && <Loading />}
			{user == false && <Auth />}
			{user == true && <Main />}
		</NavigationContainer>
	);
};

Custom Components

Layout

props required value
navigation true navigation prop
title optional string
null/false → Top bar navigation not appeared
withBack optional boolean
true → back icon with back to previous screen function
import Layout from '../components/global/Layout';
export default function ({ navigation }) {
	return (
		<Layout navigation="{navigation}" title="Home">
			{/* put your content here */}
		</Layout>
	);
}

Add Custom fonts to your project

Custom font I used in this template is "Ubuntu" (Google fonts)

  1. Find your google fonts here

  2. Install the font

    expo install @expo-google-fonts/YOUR_CHOICE expo-font
  3. Add to your project. Example in App.js

    ...
    import {
    	Ubuntu_300Light,
    	Ubuntu_300Light_Italic,
    	Ubuntu_400Regular,
    	Ubuntu_400Regular_Italic,
    	Ubuntu_500Medium,
    	Ubuntu_500Medium_Italic,
    	Ubuntu_700Bold,
    	Ubuntu_700Bold_Italic,
    } from '@expo-google-fonts/ubuntu';
    
    ...
    
    ...
    	async function loadResourcesAsync() {
    		...
    		Font.loadAsync({
    			Ubuntu_300Light,
    			Ubuntu_300Light_Italic,
    			Ubuntu_400Regular,
    			Ubuntu_400Regular_Italic,
    			Ubuntu_500Medium,
    			Ubuntu_500Medium_Italic,
    			Ubuntu_700Bold,
    			Ubuntu_700Bold_Italic,
    			}),
    		]);
    	}
    	...
    ...
  4. Edit the Custom Font component

  5. Edit the font family

    <Text
    	{...props}
    		style={[props.style,
    			{
    				fontFamily: props.bold
    				? 'Ubuntu_700Bold' <-- EDIT THIS
    				: props.medium
    				? 'Ubuntu_500Medium' <-- EDIT THIS
    				: props.light
    				? 'Ubuntu_300Light' <-- EDIT THIS
    				: 'Ubuntu_400Regular' <-- EDIT THIS
    			},
    		]}
    />

Package used

"dependencies": {
    "@expo-google-fonts/ubuntu": "^0.1.0",
    "@react-native-community/masked-view": "0.1.10",
    "@react-navigation/bottom-tabs": "^5.10.2",
    "@react-navigation/native": "^5.7.6",
    "@react-navigation/stack": "^5.9.3",
    "expo": "^40.0.0",
    "expo-app-loading": "^1.0.1",
    "expo-status-bar": "~1.0.3",
    "firebase": "7.9.0",
    "lodash": "^4.17.20",
    "moment": "^2.29.1",
    "react": "16.13.1",
    "react-dom": "16.13.1",
    "react-native": "https://github.com/expo/react-native/archive/sdk-40.0.1.tar.gz",
    "react-native-gesture-handler": "~1.8.0",
    "react-native-reanimated": "~1.13.0",
    "react-native-safe-area-context": "3.1.9",
    "react-native-screens": "~2.15.0",
    "react-native-web": "~0.13.12"
  }

File Managements

These are the folders and the functionality

/assets -> for media such as images, etc
/components -> for components
|___ /global -> Global components
|___ /navigation -> Navigation components
|___ /utils -> Utility components
/constants -> for Constants variable
/navigation -> for React Navigation
/provider -> for React Context
/screens -> for Screens

About


Languages

Language:JavaScript 100.0%