NOTE: This package provides three libraries:
-
Browser-based applications:
package:firebase/firebase.dart
andpackage:firebase/firestore.dart
A wrapper over the Firebase JS API.
-
Dart VM and Fuchsia:
package:firebase/firebase_io.dart
A lightly maintained wrapper over the Firebase Database REST API. Contributions to expand support to the other REST APIs are appreciated!
-
Flutter: FlutterFire plugins
-
Node (via dart2js): Anatoly Pulyaevskiy has been working on unofficial wrappers.
You can find more information on how to use Firebase on the Getting started page.
Don't forget to setup correct rules for your realtime database, storage and/or firestore in the Firebase console.
If you want to use Firestore, you need to enable it in the Firebase console and include the additional js script.
Authentication also has to be enabled in the Firebase console. For more info, see the next section in this document.
Install the library from pub:
dependencies:
firebase: ^6.0.0
You must include the right Firebase JavaScript libraries into your .html
file
to be able to use this package. Usually this means including firebase-app.js
as well as one or more libraries corresponding to the features you are using.
For example:
<script src="https://www.gstatic.com/firebasejs/6.6.1/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/6.6.1/firebase-firestore.js"></script>
The firestore library is available in firestore.dart
. You can find an
example how to use this library in the example/firestore.
import 'package:firebase/firebase.dart';
void main() {
initializeApp(
apiKey: "YourApiKey",
authDomain: "YourAuthDomain",
databaseURL: "YourDatabaseUrl",
projectId: "YourProjectId",
storageBucket: "YourStorageBucket");
Database db = database();
DatabaseReference ref = db.ref("messages");
ref.onValue.listen((e) {
DataSnapshot datasnapshot = e.snapshot;
// Do something with datasnapshot
});
}
import 'package:firebase/firebase.dart';
import 'package:firebase/firestore.dart' as fs;
void main() {
initializeApp(
apiKey: "YourApiKey",
authDomain: "YourAuthDomain",
databaseURL: "YourDatabaseUrl",
projectId: "YourProjectId",
storageBucket: "YourStorageBucket");
fs.Firestore store = firestore();
fs.CollectionReference ref = store.collection("messages");
ref.onSnapshot.listen((querySnapshot) {
querySnapshot.docChanges().forEach((change) {
if (change.type == "added") {
// Do something with change.doc
}
});
});
}
This library also contains a dart:io client.
Create an instance of FirebaseClient
and then use the appropriate
method (GET
, PUT
, POST
, DELETE
or PATCH
).
More info in the
official documentation.
The dart:io client also supports authentication. See the documentation on how to get auth credentials.
import 'package:firebase/firebase_io.dart';
void main() {
var credential = ... // Retrieve auth credential
var fbClient = new FirebaseClient(credential); // FirebaseClient.anonymous() is also available
var path = ... // Full path to your database location with .json appended
// GET
var response = await fbClient.get(path);
// DELETE
await fbClient.delete(path);
...
}
You can find more examples on realtime database, auth, storage and firestore in the example folder.
Demo app which uses Google login, realtime database and storage.
You need to ensure a couple of things before tests and examples in this library are run.
Create config.json
file (see config.json.sample
) in lib/src/assets
folder
with configuration for your Firebase project.
To run the io tests, you need to provide the service_account.json
file. Go to
Settings/Project settings/Service accounts
tab in your project's Firebase
console, select the Firebase Admin SDK
and click on the
Generate new private key
button, which downloads you a file.
Rename the file to service_account.json
and put it into the lib/src/assets
folder.
Warning: Use the contents of
lib/src/assets
is only for development and testing this package.
No special action needed here.
Auth tests and some examples need to have Auth providers correctly set.
The following providers need to be enabled in Firebase console,
Auth/Sign-in method
section:
- E-mail/password
- Anonymous
- Phone
Database tests and example need to have public rules to be able to read and
write to database. Update your rules in Firebase console,
Database/Realtime Database/Rules
section to:
{
"rules": {
".read": true,
".write": true
}
}
Warning: At the moment, anybody can read and write to your database. You usually don't want to have this in your production apps. You can find more information on how to setup correct database rules in the official Firebase documentation.
To be able to run tests and example, Firestore needs to be enabled in the
Database/Cloud Firestore
section.
Firestore tests and example need to have public rules to be able to read and
write to Firestore. Update your rules in Firebase console,
Database/Cloud Firestore/Rules
section to:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
Warning: At the moment, anybody can read and write to your Firestore. You usually don't want to have this in your production apps. You can find more information on how to setup correct Firestore rules in the official Firebase documentation.
You also need to include the additional firebase-firestore.js
script.
See more info.
Storage tests and example need to have public rules to be able to read and
write to storage. Firebase Storage Rules Version 2 is
required for list
and
listAll
. Update your rules in Firebase console, Storage/Rules
section
to:
rules_version = '2';
service firebase.storage {
match /b/YOUR_STORAGE_BUCKET_URL/o {
match /{allPaths=**} {
allow read, write;
}
}
}
Warning: At the moment, anybody can read and write to your storage. You usually don't want to have this in your production apps. You can find more information on how to setup correct storage rules in the official Firebase documentation.
If you find a bug, please file an issue.