How to get data from Firestore in Flutter – Firestore, a cloud-based NoSQL document-oriented database, stores and syncs data for mobile and web apps. Firebase provides real-time database, authentication, and hosting services. Firestore helps construct scalable and efficient real-time data synchronization solutions. . Flutter widget, tools, and frameworks make building attractive, responsive user interfaces easy. Flutter makes Firestore integration easy with Firebase. Firestore offers a simple API for cloud data storage and retrieval. It also offers real-time data synchronization, which updates all devices linked to the same Firestore database when one device changes data.
Use Firestore
Add the Firebase Flutter plugin, create your Firebase project, and use the Firestore API to store and retrieve data in a Flutter app. Firestore APIs and Flutter widget are provided through the Firebase Flutter plugin. Firestore in Flutter lets developers build scalable and efficient real-time data-synchronized apps. Firestore in Flutter lets developers build fast, seamless mobile apps.
how to Use Firestore flutter
Provided by Google Cloud Platform, the NoSQL document-oriented database Firestore is a popular option. Firestore is a robust, versatile database with many applications. This piece will teach you all about integrating Firestore with Flutter.
-
Setup
The following requirements must be met in your pubspec.yaml file in order to use Firestore in your Flutter project.
cloud_firestore: ^2.2.0 firebase_core: ^1.0
After adding the dependencies, run flutter pub get
in the terminal to install them.
-
Initialize Firestore
Firestore requires project-level initialization prior to use. For that, include the following in your main.dart file:
import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); }
This code prepares Firebase for usage in the app and initiates its utilization.
-
Create a Firestore instance
To create a Firestore instance, import the cloud_firestore
package and call FirebaseFirestore.instance
.
import'package:cloud_firestore/cloud_firestore.dart';
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
-
Add data to Firestore
The set()
method can be utilized to insert new information into Firestore. You can add information using the set()
method, which accepts a Map of key-value pairs.
await _firestore.collection('users').doc('user1').set({ 'name': 'John Doe', 'email': '[email protected]', 'age': 30, });
This code adds a new document to the users
collection with the ID user1
and the data provided.
-
Read data from Firestore
To read data from Firestore, you can use the get()
method. The get()
method returns a QuerySnapshot
object that contains the data returned from Firestore.
QuerySnapshot querySnapshot = await _firestore.collection('users').get(); querySnapshot.docs.forEach((doc) { print(doc.data()); });
This code reads all the documents from the users
collection and prints their data.
-
Listen to data changes
To listen to real-time data changes from Firestore, you can use the snapshots()
method. The snapshots()
method returns a Stream
that emits a new QuerySnapshot
object every time the data in Firestore changes. Stream usersStream = _firestore.collection(‘users’).snapshots(); usersStream.listen((querySnapshot) { querySnapshot.docs.forEach((doc) { print(doc.data()); }); }); This code listens to real-time changes in the users
collection and prints the data of the changed documents. That’s it! These are the basics of using Firestore in Flutter. With Firestore, you can perform more advanced queries, filter data, and use advanced features like transactions and batch writes.
full example of using Firestore in Flutter:
- Setup
Add the following dependencies to your pubspec.yaml file:
cloud_firestore: ^2.2.0
firebase_core: ^1.4.0
After adding the dependencies, run flutter pub get
in the terminal to install them.
- Initialize Firestore
Add the following code to your main.dart file:
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'screens/home_screen.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Firestore Example',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
hom
e: HomeScreen(), ); } }
This code establishes the MyApp widget as the app’s primary entry point and initializes Firebase.
- Create a Firestore instance
Create a Firestore instance in your home_screen.dart file:
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; final FirebaseFirestore _firestore = FirebaseFirestore.instance; class HomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Firestore Example'), ), body: Container(), ); } }
Add data to Firestore Add some data to Firestore in your home_screen.dart file:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
HomeScreen extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Firestore Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
await _firestore.collection('messages').add({
'text': 'Hello, World!',
'timestamp': DateTime.now(),
});
},
child: Text('Add Message'),
),
),
);
}
}
This code adds a new document to the messages
collection with the text “Hello, World!” and the current timestamp.
- Read data from Firestore
Read data from Firestore in your home_screen.dart file:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Firestore Example'),
),
body: StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('messages').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
List<DocumentSnapshot> docs = snapshot.data.docs;
return ListView.builder(
itemCount: docs.length,
itemBuilder: (context, index) {
Map<String, dynamic> data = docs[index].data();
return ListTile(
title: Text(data['text']),
subtitle: Text(data['timestamp'].toString()),
);
},
);
},
),
);
}
}
This code listens to real-time changes in the messages
collection and displays the messages in a ListView.
- Update data in Firestore
Update data in Firestore in your home_screen.dart file:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Firestore Example'),
),
body: StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('messages').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
List<DocumentSnapshot> docs = snapshot.data.docs;
return ListView.builder(
itemCount: docs.length,
itemBuilder: (context, index) {
Map<String, dynamic> data = docs[index].data();
return ListTile(
title: Text(data['text']),
subtitle: Text(data['timestamp'].toString()),
trailing: IconButton(
icon: Icon(Icons.delete),
onPressed: () async {
await _firestore
.collection('messages')
.doc(docs[index].id)
.delete();
},
),
);
},
);
},
),
);
}
}
This code adds a delete button to each message in the ListView and deletes the corresponding document when the button is pressed.
That's it! This is a simple example of using Firestore in Flutter. With Firestore, you can perform more advanced queries, filter data, and use advanced features like transactions and batch writes.
flutter firestore get document by id
To get a document by its ID in Flutter Firestore, you can use the document()
method on a CollectionReference
object and pass in the ID of the document you want to retrieve.
example:
import 'package:cloud_firestore/cloud_firestore.dart';
void getDocumentById(String documentId) async {
DocumentSnapshot documentSnapshot =
await FirebaseFirestore.instance.collection('collectionName').doc(documentId).get();
if (documentSnapshot.exists) {
// Do something with the document data
Map<String, dynamic> data = documentSnapshot.data();
print(data);
} else {
print('Document does not exist');
}
}
In this example, collectionName
is the name of the collection where the document is stored, and documentId
is the ID of the document you want to retrieve. The get()
method returns a Future
that resolves to a DocumentSnapshot
object, which contains the data for the requested document. You can check if the document exists by calling the exists
property on the DocumentSnapshot
object. If it exists, you can access the document data by calling the data()
method on the DocumentSnapshot
object.
Flutter firestore get document by field
To get a document from Firestore by a specific field, you can use the where()
method on a collection reference.
Here is an example:
final CollectionReference usersRef = FirebaseFirestore.instance.collection('users');
final QuerySnapshot snapshot = await usersRef.where('email', isEqualTo: '[email protected]').get();
if (snapshot.docs.isNotEmpty) {
final DocumentSnapshot document = snapshot.docs.first;
// Do something with the document
} else {
// Document not found
}
In this example, we are retrieving a document from the "users" collection where the "email" field matches the specified value. The get()
method returns a QuerySnapshot
object that contains all the documents that match the query. Since we are only expecting one document, we can use the docs.first
property to get the first document in the snapshot. If the snapshot is empty, it means the document was not found.
Get list from Firestore
To get a list of documents from Firestore using Flutter, you can use the get()
method of a CollectionReference
object.
example code snippet:
import 'package:cloud_firestore/cloud_firestore.dart';
Future<List<DocumentSnapshot>> getDocuments() async {
QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('myCollection').get();
return snapshot.docs;
}
This code retrieves all documents in the myCollection
collection and returns a list of DocumentSnapshot
objects. You can then use this list to display the data in your Flutter app. Note that you'll need to import the cloud_firestore
package and initialize a FirebaseFirestore
instance before you can use the Firestore API.
Get array from firestore flutter
To get an array from Firestore in Flutter, you can use the get()
method provided by the CollectionReference
class.
example:
import 'package:cloud_firestore/cloud_firestore.dart';
Future<List<String>> getArray() async {
List<String> array = [];
QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('my_collection').doc('my_doc').get();
if (snapshot.exists) {
array = List<String>.from(snapshot.data()['my_array']);
}
return array;
}
In this example, we're getting a specific document (my_doc
) from a collection (my_collection
). We assume that the document contains an array field called my_array
, which is of type List<String>
. If the document exists, we extract the array from the snapshot data and return it as a List<String>
. If the document doesn't exist or the array field is null, we return an empty list.
Update array in Firestore Flutter
To update an array in Firestore in Flutter, you can use the update()
method provided by the DocumentReference
class.
example:
FirebaseFirestore firestore = FirebaseFirestore.instance;
DocumentReference documentReference = firestore.collection('myCollection').doc('myDocument');
// Get the current array
List<String> currentArray = ['item1', 'item2', 'item3'];
// Update the array by adding a new item
currentArray.add('item4');
// Update the array in Firestore
documentReference.update({'myArray': currentArray});
In this example, we first get the current array from Firestore. We then update the array by adding a new item to it. Finally, we update the array in Firestore using the update()
method. Note that this will replace the entire array with the updated array. If you want to update only a specific item in the array, you can use the FieldValue.arrayUnion()
method provided by the FieldValue
class. Here's an example:
FirebaseFirestore firestore = FirebaseFirestore.instance;
DocumentReference documentReference = firestore.collection('myCollection').doc('myDocument');
// Update an item in the array
documentReference.update({'myArray': FieldValue.arrayUnion(['newItem'])});
In this example, we use the FieldValue.arrayUnion()
method to add a new item to the array. This method will only add the new item to the array without replacing the entire array.
Flutter add map to firestore
To add a map to Firestore using Flutter, you can follow these steps:
- Create a new Firestore document or update an existing one.
Firestore.instance.collection('myCollection').document('myDocument').setData({ 'name': 'John', 'age': 30, 'location': {'latitude': 123.456, 'longitude': 789.012} });
- To retrieve the map data from Firestore, you can use the
data()
method on the document snapshot.
Firestore.instance.collection('myCollection').document('myDocument').get().then((doc) { if (doc.exists) { Map<String, dynamic> data = doc.data(); double latitude = data['location']['latitude']; double longitude = data['location']['longitude']; print('Latitude: $latitude, Longitude: $longitude'); } });
Note: Make sure to import the cloud_firestore
package in your Flutter project.
import 'package:cloud_firestore/cloud_firestore.dart';
Flutter firestore update map
To update a map in Firestore using Flutter, you can use the update
method of the DocumentReference
class.
example:
// Get the document reference DocumentReference docRef = FirebaseFirestore.instance.collection('myCollection').doc('myDoc'); // Update the map field docRef.update({ 'myMapField.myKey': 'myNewValue', });
This example updates the key myKey in the myMapField
map to myNewValue
. If the key is not in the map, it will be added. Passing a map of updates updates many fields at once:
docRef.update({ 'myMapField.myKey': 'myNewValue', 'anotherMapField.anotherKey': 'anotherNewValue', });
This will update both the myMapField.myKey
and anotherMapField.anotherKey
fields in the document.
Conclusion
Many Flutter applications that save and retrieve data use Firestore because of its real-time synchronization, offline support, and flexible querying. Flutter supports an official Firestore plugin and utility widgets and classes like StreamBuilder and QuerySnapshot to simplify Firestore integration. Denormalize data and avoid nested collections while using Firestore in Flutter. Optimizing queries and data readings reduces network calls and performance. Firestore in Flutter is powerful and flexible for data storage and retrieval. Developers may build Firestore-powered apps that are efficient and scalable by understanding its capabilities and following best practices.
This code prepares Firebase for usage in the app and initiates its utilization.
-
Create a Firestore instance
To create a Firestore instance, import the cloud_firestore
package and call FirebaseFirestore.instance
.
import'package:cloud_firestore/cloud_firestore.dart';
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
-
Add data to Firestore
The set()
method can be utilized to insert new information into Firestore. You can add information using the set()
method, which accepts a Map of key-value pairs.
await _firestore.collection('users').doc('user1').set({ 'name': 'John Doe', 'email': '[email protected]', 'age': 30, });
This code adds a new document to the users
collection with the ID user1
and the data provided.
-
Read data from Firestore
To read data from Firestore, you can use the get()
method. The get()
method returns a QuerySnapshot
object that contains the data returned from Firestore.
QuerySnapshot querySnapshot = await _firestore.collection('users').get(); querySnapshot.docs.forEach((doc) { print(doc.data()); });
This code reads all the documents from the users
collection and prints their data.
-
Listen to data changes
To listen to real-time data changes from Firestore, you can use the snapshots()
method. The snapshots()
method returns a Stream
that emits a new QuerySnapshot
object every time the data in Firestore changes. Stream usersStream = _firestore.collection('users').snapshots(); usersStream.listen((querySnapshot) { querySnapshot.docs.forEach((doc) { print(doc.data()); }); }); This code listens to real-time changes in the users
collection and prints the data of the changed documents. That's it! These are the basics of using Firestore in Flutter. With Firestore, you can perform more advanced queries, filter data, and use advanced features like transactions and batch writes.
full example of using Firestore in Flutter:
- Setup
Add the following dependencies to your pubspec.yaml file:
cloud_firestore: ^2.2.0 firebase_core: ^1.4.0
After adding the dependencies, run flutter pub get
in the terminal to install them.
- Initialize Firestore
Add the following code to your main.dart file:
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'screens/home_screen.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Firestore Example',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
hom
e: HomeScreen(), ); } }
This code establishes the MyApp widget as the app's primary entry point and initializes Firebase.
- Create a Firestore instance
Create a Firestore instance in your home_screen.dart file:
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; final FirebaseFirestore _firestore = FirebaseFirestore.instance; class HomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Firestore Example'), ), body: Container(), ); } }
Add data to Firestore Add some data to Firestore in your home_screen.dart file:
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; final FirebaseFirestore _firestore = FirebaseFirestore.instance; HomeScreen extends StatelessWidget{ @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Firestore Example'), ), body: Center( child: ElevatedButton( onPressed: () async { await _firestore.collection('messages').add({ 'text': 'Hello, World!', 'timestamp': >DateTime.now(), }); }, child: Text('Add Message'), ), ), ); } }
This code adds a new document to the messages
collection with the text "Hello, World!" and the current timestamp.
- Read data from Firestore
Read data from Firestore in your home_screen.dart file:
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; final FirebaseFirestore _firestore = FirebaseFirestore.instance; class HomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Firestore Example'), ), body: StreamBuilder<QuerySnapshot>( stream: _firestore.collection('messages').snapshots(), builder: (context, snapshot) { if (!snapshot.hasData) { return Center( child: CircularProgressIndicator(), ); } >List<DocumentSnapshot> docs = snapshot.data.docs; return ListView.builder( itemCount: docs.length, itemBuilder: (context, index) { >Map<>String, >dynamic> data = docs[index].data(); return ListTile( title: Text(data['text']), subtitle: Text(data['timestamp'].toString()), ); }, ); }, ), ); } }
The code in question keeps an eye out for new messages as they come in and updates a ListView accordingly.
- Update data in Firestore
Update data in Firestore in your home_screen.dart file:
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; final FirebaseFirestore _firestore = FirebaseFirestore.instance; class HomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Firestore Example'), ), body: StreamBuilder<QuerySnapshot>( stream: _firestore.collection('messages').snapshots(), builder: (context, snapshot) { if (!snapshot.hasData) { return Center( child: CircularProgressIndicator(), ); } >List<DocumentSnapshot> docs = snapshot.data.docs; return ListView.builder( itemCount: docs.length, itemBuilder: (context, index) { >Map<>String, >dynamic> data = docs[index].data(); return ListTile( title: Text(data['text']), subtitle: Text(data['timestamp'].toString()), trailing: IconButton( icon: Icon(Icons.delete), onPressed: () async { await _firestore .collection('messages') .doc(docs[index].id) .delete(); }, ), ); }, ); }, ), ); } }
This code adds a delete button to each message in the ListView and deletes the corresponding document when the button is pressed.
That's it! This is a simple example of using Firestore in Flutter. With Firestore, you can perform more advanced queries, filter data, and use advanced features like transactions and batch writes.
flutter firestore get document by id
To get a document by its ID in Flutter Firestore, you can use the document()
method on a CollectionReference
object and pass it the ID of the document you wish to access.
example:
import 'package:cloud_firestore/cloud_firestore.dart'; void getDocumentById(>String documentId) async { DocumentSnapshot documentSnapshot = await FirebaseFirestore.instance.collection('collectionName').doc(documentId).get(); if (documentSnapshot.exists) { // Do something with the document data >Map<>String, >dynamic> data = documentSnapshot.data(); >print(data); } else { >print('Document does not exist'); } }
This example uses collectionName
and documentId
to obtain a document from a collection. Get()
produces a Future that resolves to a DocumentSnapshot
object with document contents. The DocumentSnapshot
object's exists property checks for document existence. .
Flutter firestore get document by field
To get a document from Firestore by a specific field, you can use the where()
method on a collection reference.
Here is an example:
final CollectionReference usersRef = FirebaseFirestore.instance.collection('users'); final QuerySnapshot snapshot = await usersRef.where('email', isEqualTo: '[email protected]').get(); if (snapshot.docs.isNotEmpty) { final DocumentSnapshot >document = snapshot.docs.first; // Do something with the document } else { // Document not found }
In this case, we are looking for a document in the "users" collection with a "email" field with the given value. A QuerySnapshot
object containing all matching documents is returned by the get()
method. Since we only need a single document, we can retrieve it quickly by using the docs.first
property on the snapshot collection. If there is nothing in the snapshot, then the document could not be located.
Get list from Firestore
To get a list of documents from Firestore using Flutter, you can use the get()
method of a CollectionReference
object.
example code snippet:
import 'package:cloud_firestore/cloud_firestore.dart'; Future<>List<DocumentSnapshot>> getDocuments() async { QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('myCollection').get(); return snapshot.docs; }
This code retrieves all documents in the myCollection
collection and returns a list of DocumentSnapshot
objects. You can then use this list to display the data in your Flutter app. Note that you'll need to import the cloud_firestore
package and initialize a FirebaseFirestore
instance before you can use the Firestore API.
Get array from firestore flutter
To get an array from Firestore in Flutter, you can use the get()
method provided by the CollectionReference
class.
example:
import 'package:cloud_firestore/cloud_firestore.dart'; Future<>List<>String>> getArray() async { >List<>String> array = []; QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('my_collection').doc('my_doc').get(); if (snapshot.exists) { array = >List<>String>.from(snapshot.data()['my_array']); } return array; }
This example retrieves a single document (my doc) from a larger set (my collection)
. A field of type ListString> named my array is assumed to exist in the doc. If the file already exists, we'll take the snapshot, extract the array, and return it as a ListString>. In the event that the document does not exist or the array field is null, we will return an empty list.
Update array in Firestore Flutter
To update an array in Firestore in Flutter, you can use the update()
method provided by the DocumentReference
class.
example:
FirebaseFirestore firestore = FirebaseFirestore.instance; DocumentReference documentReference = firestore.collection('myCollection').doc('myDocument'); // Get the current array List<>String> currentArray = ['item1', 'item2', 'item3']; // Update the array by adding a new item currentArray.add('item4'); // Update the array in Firestore documentReference.update({'myArray': currentArray});
In this example, we first get the current array from Firestore. We then update the array by adding a new item to it. Finally, we update the array in Firestore using the update()
method. Note that this will replace the entire array with the updated array. If you want to update only a specific item in the array, you can use the FieldValue.arrayUnion()
method provided by the FieldValue
class. Here's an example:
FirebaseFirestore firestore = FirebaseFirestore.instance; DocumentReference documentReference = firestore.collection('myCollection').doc('myDocument'); // Update an item in the array documentReference.update({'myArray': FieldValue.arrayUnion(['newItem'])});
In this example, we use the FieldValue.arrayUnion()
method to add a new item to the array. This method will only add the new item to the array without replacing the entire array.
Flutter add map to firestore
To add a map to Firestore using Flutter, you can follow these steps:
- Create a new Firestore document or update an existing one.
Firestore.instance>.collection('myCollection')>.document('myDocument').setData({ 'name': 'John', 'age': 30, 'location': {'latitude': 123.456, 'longitude': 789.012} });
- To retrieve the map data from Firestore, you can use the
data()
method on the document snapshot.
Firestore.instance.collection('myCollection').>document('myDocument').get().then((doc) { if (doc.exists) { >Map<>String, >dynamic> data = doc.data(); >double latitude = data['location']['latitude']; >double longitude = data['location']['longitude']; >print('Latitude: $latitude, Longitude: $longitude'); } });
Note: Make sure to import the cloud_firestore
package in your Flutter project.
import 'package:cloud_firestore/cloud_firestore.dart';
Flutter firestore update map
To update a map in Firestore using Flutter, you can use the update
method of the DocumentReference
class.
example:
// Get the> document reference DocumentReference docRef = FirebaseFirestore.instance>.collection('myCollection')>.doc('myDoc'); // Update the map field docRef.update({ 'myMapField.myKey': 'myNewValue', });
In this example, we are updating the value of the key myKey
in the myMapField
map to myNewValue
. Note that if the specified key does not exist in the map, it will be added. You can also update multiple fields at once by passing in a map of updates:
docRef.update({ 'myMapField.myKey':'myNewValue', 'anotherMapField.anotherKey':'anotherNewValue', });
This will update both the myMapField.myKey
and anotherMapField.anotherKey
fields in the document.
How to get data from Firestore in Flutter - Firestore, a cloud-based NoSQL document-oriented database, stores and syncs data for mobile and web apps. Firebase provides real-time database, authentication, and hosting services. Firestore helps construct scalable and efficient real-time data synchronization solutions. . Flutter's widgets, tools, and frameworks make building attractive, responsive user interfaces easy. Flutter makes Firestore integration easy with Firebase. Firestore offers a simple API for cloud data storage and retrieval. It also offers real-time data synchronization, which updates all devices linked to the same Firestore database when one device changes data.
Use Firestore
Add the Firebase Flutter plugin, create your Firebase project, and use the Firestore API to store and retrieve data in a Flutter app. Firestore APIs and Flutter widgets are provided through the Firebase Flutter plugin. Firestore in Flutter lets developers build scalable and efficient real-time data-synchronized apps. Firestore in Flutter lets developers build fast, seamless mobile apps.
how to Use Firestore flutter
Provided by Google Cloud Platform, the NoSQL document-oriented database Firestore is a popular option. Firestore is a robust, versatile database with many applications. This piece will teach you all about integrating Firestore with Flutter.
-
Setup
The following requirements must be met in your pubspec.yaml file in order to use Firestore in your Flutter project.
cloud_firestore: ^2.2.0 firebase_core: ^1.0
After adding the dependencies, run flutter pub get
in the terminal to install them.
-
Initialize Firestore
Firestore requires project-level initialization prior to use. For that, include the following in your main.dart file:
import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); }
This code prepares Firebase for usage in the app and initiates its utilization.
-
Create a Firestore instance
To create a Firestore instance, import the cloud_firestore
package and call FirebaseFirestore.instance
.
import'package:cloud_firestore/cloud_firestore.dart';
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
-
Add data to Firestore
The set()
method can be utilized to insert new information into Firestore. You can add information using the set()
method, which accepts a Map of key-value pairs.
await _firestore.collection('users').doc('user1').set({ 'name': 'John Doe', 'email': '[email protected]', 'age': 30, });
This code adds a new document to the users
collection with the ID user1
and the data provided.
-
Read data from Firestore
To read data from Firestore, you can use the get()
method. The get()
method returns a QuerySnapshot
object that contains the data returned from Firestore.
QuerySnapshot querySnapshot = await _firestore.collection('users').get(); querySnapshot.docs.forEach((doc) { print(doc.data()); });
This code reads all the documents from the users
collection and prints their data.
-
Listen to data changes
To listen to real-time data changes from Firestore, you can use the snapshots()
method. The snapshots()
method returns a Stream
that emits a new QuerySnapshot
object every time the data in Firestore changes. Stream usersStream = _firestore.collection('users').snapshots(); usersStream.listen((querySnapshot) { querySnapshot.docs.forEach((doc) { print(doc.data()); }); }); This code listens to real-time changes in the users
collection and prints the data of the changed documents. That's it! These are the basics of using Firestore in Flutter. With Firestore, you can perform more advanced queries, filter data, and use advanced features like transactions and batch writes.
full example of using Firestore in Flutter:
- Setup
Add the following dependencies to your pubspec.yaml file:
cloud_firestore: ^2.2.0
firebase_core: ^1.4.0
After adding the dependencies, run flutter pub get
in the terminal to install them.
- Initialize Firestore
Add the following code to your main.dart file:
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'screens/home_screen.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Firestore Example',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
hom
e: HomeScreen(), ); } }
This code establishes the MyApp widget as the app's primary entry point and initializes Firebase.
- Create a Firestore instance
Create a Firestore instance in your home_screen.dart file:
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; final FirebaseFirestore _firestore = FirebaseFirestore.instance; class HomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Firestore Example'), ), body: Container(), ); } }
Add data to Firestore Add some data to Firestore in your home_screen.dart file:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
HomeScreen extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Firestore Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
await _firestore.collection('messages').add({
'text': 'Hello, World!',
'timestamp': DateTime.now(),
});
},
child: Text('Add Message'),
),
),
);
}
}
This code adds a new document to the messages
collection with the text "Hello, World!" and the current timestamp.
- Read data from Firestore
Read data from Firestore in your home_screen.dart file:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Firestore Example'),
),
body: StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('messages').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
List<DocumentSnapshot> docs = snapshot.data.docs;
return ListView.builder(
itemCount: docs.length,
itemBuilder: (context, index) {
Map<String, dynamic> data = docs[index].data();
return ListTile(
title: Text(data['text']),
subtitle: Text(data['timestamp'].toString()),
);
},
);
},
),
);
}
}
This code listens to real-time changes in the messages
collection and displays the messages in a ListView.
- Update data in Firestore
Update data in Firestore in your home_screen.dart file:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Firestore Example'),
),
body: StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('messages').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
List<DocumentSnapshot> docs = snapshot.data.docs;
return ListView.builder(
itemCount: docs.length,
itemBuilder: (context, index) {
Map<String, dynamic> data = docs[index].data();
return ListTile(
title: Text(data['text']),
subtitle: Text(data['timestamp'].toString()),
trailing: IconButton(
icon: Icon(Icons.delete),
onPressed: () async {
await _firestore
.collection('messages')
.doc(docs[index].id)
.delete();
},
),
);
},
);
},
),
);
}
}
This code adds a delete button to each message in the ListView and deletes the corresponding document when the button is pressed.
That's it! This is a simple example of using Firestore in Flutter. With Firestore, you can perform more advanced queries, filter data, and use advanced features like transactions and batch writes.
flutter firestore get document by id
To get a document by its ID in Flutter Firestore, you can use the document()
method on a CollectionReference
object and pass in the ID of the document you want to retrieve.
example:
import 'package:cloud_firestore/cloud_firestore.dart';
void getDocumentById(String documentId) async {
DocumentSnapshot documentSnapshot =
await FirebaseFirestore.instance.collection('collectionName').doc(documentId).get();
if (documentSnapshot.exists) {
// Do something with the document data
Map<String, dynamic> data = documentSnapshot.data();
print(data);
} else {
print('Document does not exist');
}
}
In this example, collectionName
is the name of the collection where the document is stored, and documentId
is the ID of the document you want to retrieve. The get()
method returns a Future
that resolves to a DocumentSnapshot
object, which contains the data for the requested document. You can check if the document exists by calling the exists
property on the DocumentSnapshot
object. If it exists, you can access the document data by calling the data()
method on the DocumentSnapshot
object.
Flutter firestore get document by field
To get a document from Firestore by a specific field, you can use the where()
method on a collection reference.
Here is an example:
final CollectionReference usersRef = FirebaseFirestore.instance.collection('users');
final QuerySnapshot snapshot = await usersRef.where('email', isEqualTo: '[email protected]').get();
if (snapshot.docs.isNotEmpty) {
final DocumentSnapshot document = snapshot.docs.first;
// Do something with the document
} else {
// Document not found
}
In this example, we are retrieving a document from the "users" collection where the "email" field matches the specified value. The get()
method returns a QuerySnapshot
object that contains all the documents that match the query. Since we are only expecting one document, we can use the docs.first
property to get the first document in the snapshot. If the snapshot is empty, it means the document was not found.
Get list from Firestore
To get a list of documents from Firestore using Flutter, you can use the get()
method of a CollectionReference
object.
example code snippet:
import 'package:cloud_firestore/cloud_firestore.dart';
Future<List<DocumentSnapshot>> getDocuments() async {
QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('myCollection').get();
return snapshot.docs;
}
This code retrieves all documents in the myCollection
collection and returns a list of DocumentSnapshot
objects. You can then use this list to display the data in your Flutter app. Note that you'll need to import the cloud_firestore
package and initialize a FirebaseFirestore
instance before you can use the Firestore API.
Get array from firestore flutter
To get an array from Firestore in Flutter, you can use the get()
method provided by the CollectionReference
class.
example:
import 'package:cloud_firestore/cloud_firestore.dart';
Future<List<String>> getArray() async {
List<String> array = [];
QuerySnapshot snapshot = await FirebaseFirestore.instance.collection('my_collection').doc('my_doc').get();
if (snapshot.exists) {
array = List<String>.from(snapshot.data()['my_array']);
}
return array;
}
In this example, we're getting a specific document (my_doc
) from a collection (my_collection
). We assume that the document contains an array field called my_array
, which is of type List<String>
. If the document exists, we extract the array from the snapshot data and return it as a List<String>
. If the document doesn't exist or the array field is null, we return an empty list.
Update array in Firestore Flutter
To update an array in Firestore in Flutter, you can use the update()
method provided by the DocumentReference
class.
example:
FirebaseFirestore firestore = FirebaseFirestore.instance;
DocumentReference documentReference = firestore.collection('myCollection').doc('myDocument');
// Get the current array
List<String> currentArray = ['item1', 'item2', 'item3'];
// Update the array by adding a new item
currentArray.add('item4');
// Update the array in Firestore
documentReference.update({'myArray': currentArray});
In this example, we first get the current array from Firestore. We then update the array by adding a new item to it. Finally, we update the array in Firestore using the update()
method. Note that this will replace the entire array with the updated array. If you want to update only a specific item in the array, you can use the FieldValue.arrayUnion()
method provided by the FieldValue
class. Here's an example:
FirebaseFirestore firestore = FirebaseFirestore.instance;
DocumentReference documentReference = firestore.collection('myCollection').doc('myDocument');
// Update an item in the array
documentReference.update({'myArray': FieldValue.arrayUnion(['newItem'])});
In this example, we use the FieldValue.arrayUnion()
method to add a new item to the array. This method will only add the new item to the array without replacing the entire array.
Flutter add map to firestore
To add a map to Firestore using Flutter, you can follow these steps:
- Create a new Firestore document or update an existing one.
Firestore.instance.collection('myCollection').document('myDocument').setData({ 'name': 'John', 'age': 30, 'location': {'latitude': 123.456, 'longitude': 789.012} });
- To retrieve the map data from Firestore, you can use the
data()
method on the document snapshot.
Firestore.instance.collection('myCollection').document('myDocument').get().then((doc) { if (doc.exists) { Map<String, dynamic> data = doc.data(); double latitude = data['location']['latitude']; double longitude = data['location']['longitude']; print('Latitude: $latitude, Longitude: $longitude'); } });
Note: Make sure to import the cloud_firestore
package in your Flutter project.
import 'package:cloud_firestore/cloud_firestore.dart';
Flutter firestore update map
To update a map in Firestore using Flutter, you can use the update
method of the DocumentReference
class.
example:
// Get the document reference DocumentReference docRef = FirebaseFirestore.instance.collection('myCollection').doc('myDoc'); // Update the map field docRef.update({ 'myMapField.myKey': 'myNewValue', });
This example updates the key myKey in the myMapField
map to myNewValue
. If the key is not in the map, it will be added. Passing a map of updates updates many fields at once:
docRef.update({ 'myMapField.myKey': 'myNewValue', 'anotherMapField.anotherKey': 'anotherNewValue', });
This will update both the myMapField.myKey
and anotherMapField.anotherKey
fields in the document.
Conclusion
Many Flutter applications that save and retrieve data use Firestore because of its real-time synchronization, offline support, and flexible querying. Flutter supports an official Firestore plugin and utility widgets and classes like StreamBuilder and QuerySnapshot to simplify Firestore integration. Denormalize data and avoid nested collections while using Firestore in Flutter. Optimizing queries and data readings reduces network calls and performance. Firestore in Flutter is powerful and flexible for data storage and retrieval. Developers may build Firestore-powered apps that are efficient and scalable by understanding its capabilities and following best practices.