A Flutter plugin to use the Cloud Firestore API.
For Flutter plugins for other Firebase products, see README.md.
Setup
To use this plugin:
- Add
cloud_firestore
as a dependency in your pubspec.yaml file.
Android
- Using the Firebase Console, add an Android app to your project.
- Follow the assistant, and download the generated
google-services.json
file and place it insideandroid/app
. - Modify the
android/build.gradle
file and theandroid/app/build.gradle
file to add the Google services plugin as described by the Firebase assistant. Ensure that yourandroid/build.gradle
file contains themaven.google.com
as described here.
iOS
- Using the Firebase Console, add an iOS app to your project.
- Follow the assistant, download the generated
GoogleService-Info.plist
file. Do NOT follow the steps named “Add Firebase SDK” and “Add initialization code” in the Firebase assistant. - Open
ios/Runner.xcworkspace
with Xcode, and within Xcode place theGoogleService-Info.plist
file insideios/Runner
.
Web
In addition to the cloud_firestore
dependency, you’ll need to modify the web/index.html
of your app following the Firebase setup instructions:
Read more in the cloud_firestore_web
README.
Usage
import 'package:cloud_firestore/cloud_firestore.dart';
Adding a new DocumentReference
:
Firestore.instance.collection('books').document()
.setData({ 'title': 'title', 'author': 'author' });
Binding a CollectionReference
to a ListView
:
class BookList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection('books').snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError)
return new Text('Error: ${snapshot.error}');
switch (snapshot.connectionState) {
case ConnectionState.waiting: return new Text('Loading...');
default:
return new ListView(
children: snapshot.data.documents.map((DocumentSnapshot document) {
return new ListTile(
title: new Text(document['title']),
subtitle: new Text(document['author']),
);
}).toList(),
);
}
},
);
}
}
Performing a query:
Firestore.instance
.collection('talks')
.where("topic", isEqualTo: "flutter")
.snapshots()
.listen((data) =>
data.documents.forEach((doc) => print(doc["title"])));
Get a specific document:
Firestore.instance
.collection('talks')
.document('document-name')
.get()
.then((DocumentSnapshot ds) {
// use ds as a snapshot
});
Running a transaction:
final DocumentReference postRef = Firestore.instance.document('posts/123');
Firestore.instance.runTransaction((Transaction tx) async {
DocumentSnapshot postSnapshot = await tx.get(postRef);
if (postSnapshot.exists) {
await tx.update(postRef, <String, dynamic>{'likesCount': postSnapshot.data['likesCount'] + 1});
}
});
Getting Started
See the example
directory for a complete sample app using Cloud Firestore.
Issues and feedback
Please file Flutterfire specific issues, bugs, or feature requests in our issue tracker.
Plugin issues that are not specific to Flutterfire can be filed in the Flutter issue tracker.
To contribute a change to this plugin, please review our contribution guide, and send a pull request.
Download Cloud Firestore Plugin for Flutter source code on GitHub
https://github.com/FirebaseExtended/flutterfire
Provides the list of the opensource Flutter apps collection with GitHub repository.