Skip to content

expo-community/expo-firebase-starter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

294 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

expo-firebase-starter ๐Ÿ”ฅ

Supports Expo iOS Supports Expo Android runs with Expo Go

Is a quicker way to start with Expo + Firebase (using JS SDK) projects. It includes:

  • based on Expo SDK 50
  • navigation using react-navigation 6.x.x
  • Firebase JS SDK v9
  • Firebase as the backend for email auth
  • custom and reusable components
  • custom hook to toggle password field visibility on a TextInput
  • handles server errors using Formik
  • Login, Signup & Password Reset form built using Formik & yup
  • show/hide the Password Field's visibility ๐Ÿ‘
  • uses a custom Provider using Context API & Firebase's onAuthStateChanged handler to check the user's auth state with
  • handles Forgot Password Reset using the Firebase email method
  • uses Expo Vector Icons
  • uses KeyboardAwareScrollView package to handle keyboard appearance and automatically scrolls to focused TextInput
  • uses dotenv and expo-constants packages to manage environment variables (so that they are not exposed on public repositories)
  • all components are now functional components and use React Hooks

Installation

  1. Create a new project using the firebase starter template.
npx create-react-native-app --template https://github.com/expo-community/expo-firebase-starter
  1. Rename the file example.env to .env
  2. Update .env with your own configuration, e.g.:
# Rename this file to ".env" before use
# Replace XXXX's with your own Firebase config keys
API_KEY=XXXX
AUTH_DOMAIN=XXXX
PROJECT_ID=XXXX
STORAGE_BUCKET=XXXX
MESSAGING_SENDER_ID=XXXX
APP_ID=XXXX

Run project

To start the development server and run your project:

npx expo start

Alternate to using Expo Go, if you are building more than a hobby project or a prototype, make sure you create a development build. You can either locally compile your project or use EAS.

To locally compile your app, run:

# Build native Android project
npx expo run:android

# Build native iOS project
npx expo run:ios

File Structure

Expo Firebase Starter
โ”œโ”€โ”€ assets โžก๏ธ All static assets, includes app logo
โ”œโ”€โ”€ components โžก๏ธ All re-suable UI components for form screens
โ”‚   โ””โ”€โ”€ Button.js โžก๏ธ Custom Button component using Pressable, comes with two variants and handles opacity
โ”‚   โ””โ”€โ”€ TextInput.js โžก๏ธ Custom TextInput component that supports left and right cons
โ”‚   โ””โ”€โ”€ Icon.js โžก๏ธ Icon component
โ”‚   โ””โ”€โ”€ FormErrorMessage.js โžก๏ธ Component to display server errors from Firebase
โ”‚   โ””โ”€โ”€ LoadingIndicator.js โžก๏ธ Loading indicator component
โ”‚   โ””โ”€โ”€ Logo.js โžก๏ธ Logo component
โ”‚   โ””โ”€โ”€ View.js โžก๏ธ Custom View component that supports safe area views
โ”œโ”€โ”€ hooks โžก๏ธ All custom hook components
โ”‚   โ””โ”€โ”€ useTogglePasswordVisibility.js โžก๏ธ A custom hook that toggles password visibility on a TextInput component on a confirm password field
โ”œโ”€โ”€ config โžก๏ธ All configuration files
โ”‚   โ””โ”€โ”€ firebase.js โžก๏ธ Configuration file to initialize firebase with firebaseConfig and auth
โ”‚   โ””โ”€โ”€ images.js โžก๏ธ Require image assets, reusable values across the app
โ”‚   โ””โ”€โ”€ theme.js โžก๏ธ Default set of colors, reusable values across the app
โ”œโ”€โ”€ providers โžก๏ธ All custom providers that use React Context API
โ”‚   โ””โ”€โ”€ AuthenticatedUserProvider.js โžก๏ธ An Auth User Context component that shares Firebase user object when logged-in
โ”œโ”€โ”€ navigation
โ”‚   โ””โ”€โ”€ AppStack.js โžก๏ธ Protected routes such as Home screen
โ”‚   โ””โ”€โ”€ AuthStack.js โžก๏ธ Routes such as Login screen, when the user is not authenticated
โ”‚   โ””โ”€โ”€ RootNavigator.js โžก๏ธ Switch between Auth screens and App screens based on Firebase user logged-in state
โ”œโ”€โ”€ screens
โ”‚   โ””โ”€โ”€ ForgotPassword.js โžก๏ธ Forgot Password screen component
โ”‚   โ””โ”€โ”€ HomeScreen.js โžก๏ธ Protected route/screen component
โ”‚   โ””โ”€โ”€ LoginScreen.js โžก๏ธ Login screen component
โ”‚   โ””โ”€โ”€ SignupScreen.js โžก๏ธ Signup screen component
โ”œโ”€โ”€ App.js โžก๏ธ Entry Point for Mobile apps, wrap all providers here
โ”œโ”€โ”€ app.config.js โžก๏ธ Expo config file
โ””โ”€โ”€ babel.config.js โžก๏ธ Babel config (should be using `babel-preset-expo`)

Screens

Main screens:

  • Login
  • Signup
  • Forgot password
  • Home (Bare Minimum) with a logout button

Login screen with validation

Successful sign up attempt

Forgot password screen

Validation on Signup screens

Development builds and React Native Firebase library

This project uses Firebase JS SDK, which doesn't support all services (such as Crashlytics, Dynamic Links, and Analytics). However, you can use the react-native-firebase library in an Expo project by creating a development build.

Both of these libraries can satisfy different project requirements. To learn about the differences between using Firebase JS SDK and React Native Firebase library when building your app with Expo, see the following sections from Expo's official documentation:


Built with ๐Ÿ’œ by @amanhimself

Packages

 
 
 

Contributors

โšก