DEV Community

Cover image for A month of Flutter: setting up Firebase Firestore
Abraham Williams
Abraham Williams

Posted on • Originally published at bendyworks.com

A month of Flutter: setting up Firebase Firestore

Originally published on bendyworks.com.

After a user signs in with Google and registers, their info needs to be saved to a databasee. I'm going to use Firebase 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.

$ 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.{% raw %}

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

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

~~~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
~~~{% endraw %}

Installing the [{% raw %}`cloud_firestore`{% endraw %} package](https://pub.dartlang.org/packages/cloud_firestore) in {% raw %}`pubspec.yaml`{% endraw %} 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)
Enter fullscreen mode Exit fullscreen mode

Top comments (2)

Collapse
 
cyberdroidmann profile image
Gabriel Stephen Alexander

Phew! Thanks for your write ups! The TDD is amazing

Collapse
 
abraham profile image
Abraham Williams

Glad you are enjoying them!