A month of Flutter: setting up Firebase Firestore
Tags: flutter, tutorial, firebase, firestore
Published: 2018-12-24 22:25:00

_Originally published on [bendyworks.com](https://bendyworks.com/blog/a-month-of-flutter-setting-up-firebase-firestore)._

After a user [signs in with Google](https://bendyworks.com/blog/a-month-of-flutter-sign-in-with-google) and [registers](https://bendyworks.com/blog/a-month-of-flutter-user-registration-form), their info needs to be saved to a databasee. I'm going to use [Firebase Firestore](https://firebase.google.com/docs/firestore/) as my backend. Within the `birb` codebase I'm going to create a `server` directory and initialize a Firestore project inside it using [firebase-tools](https://www.npmjs.com/package/firebase-tools).

~~~bash
$ firebase init

     ######## #### ########  ######## ########     ###     ######  ########
     ##        ##  ##     ## ##       ##     ##  ##   ##  ##       ##
     ######    ##  ########  ######   ########  #########  ######  ######
     ##        ##  ##    ##  ##       ##     ## ##     ##       ## ##
     ##       #### ##     ## ######## ########  ##     ##  ######  ########

You're about to initialize a Firebase project in this directory:

  /home/abraham/Development/birb

? Which Firebase CLI features do you want to setup for this folder? Press Space to select features, then Enter to confirm your choices.
 ◯ Database: Deploy Firebase Realtime Database Rules
❯◉ Firestore: Deploy rules and create indexes for Firestore
 ◯ Functions: Configure and deploy Cloud Functions
 ◯ Hosting: Configure and deploy Firebase Hosting sites
 ◯ Storage: Deploy Cloud Storage security rules
~~~

I choose the [same Firebase project](https://bendyworks.com/blog/a-month-of-flutter-configure-sign-in-with-google-android) being used for authentication, the default Firestore Rules file, and the default Firestore indexes file. By default `.firebaserc` is not `.gitignored`. I have added my `.firebasrc` to `.gitignore` because this is an open source project. Anyone who forks Birb will need to set up their own Firebase project.

In the Firebase console I will now enable Firestore for the project.

![Enabling Firestore](https://thepracticaldev.s3.amazonaws.com/i/jjp5dsl68e4sdkdfg3c1.png)

Here are the default `firestore.rules` that just say don't allow reads or writes.

~~~js
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}
~~~

Deploying the rules is handled with the [firebase-tools Node package](https://www.npmjs.com/package/firebase-tools).

~~~bash
$ npx firebase deploy

=== Deploying to 'birb-app-dev'...

i  deploying firestore
i  firestore: checking firestore.rules for compilation errors...
i  firestore: reading indexes from firestore.indexes.json...
✔  firestore: rules file firestore.rules compiled successfully
i  firestore: uploading rules firestore.rules...
✔  firestore: deployed indexes in firestore.indexes.json successfully
✔  firestore: released rules firestore.rules to cloud.firestore

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/birb-app-dev/overview
~~~

Installing the [`cloud_firestore` package](https://pub.dartlang.org/packages/cloud_firestore) in `pubspec.yaml` happens last.

Before integrating with the Flutter code, I'm going to write some rules with so come back soon for that article.

## Code changes

- [#57 Add Firestore](https://github.com/abraham/birb/pull/57)