Collection<T> class

Defines a collection reference.

To define a collection reference, first it is necessary to define a class representing the content of a document of the collection.

That can be done by defining any serializable Dart class, such as by using json_serializable as followed:

@JsonSerializable()
class Person {
  Person({required this.name, required this.age});

  factory Person.fromJson(Map<String, Object?> json) => _$PersonFromJson(json);

  final String name;
  final String age;

  Map<String, Object?> toJson() => _$PersonToJson(this);
}

Then, we should define a global variable representing our collection reference, using the Collection annotation.

To do so, we must specify the path to the collection and the type of the collection content:

@Collection<Person>('persons')
final personsRef = PersonCollectionReference();

The class PersonCollectionReference will be generated from the Person class, and will allow manipulating the collection in a type-safe way. For example, to read the person collection, you could do:

void main() async {
  PersonQuerySnapshot snapshot = await personsRef.get();

  for (PersonQueryDocumentSnapshot doc in snapshot.docs) {
    Person person = doc.data();
    print(person.name);
  }
}

Note Don't forget to include part "my_file.g.dart" at the top of your file.

Obtaining a document reference.

It is possible to obtain a document reference from a collection reference.

Assuming we have:

@Collection<Person>('persons')
final personsRef = PersonCollectionReference();

then we can get a document with:

void main() async {
  PersonDocumentReference doc = personsRef.doc('document-id');

  PersonDocumentSnapshot snapshot = await doc.get();
}

Defining a sub-collection

Once you have defined a collection, you may want to define a sub-collection.

To do that, you first must create a root collection as described previously. From there, you can add extra @Collection annotations to a collection reference for defining sub-collections:

@Collection<Person>('persons')
@Collection<Friend>('persons/*/friends', name: 'friends') // defines a sub-collection "friends"
final personsRef = PersonCollectionReference();

Then, the sub-collection will be available from a document reference:

void main() async {
  PersonDocumentReference johnRef = personsRef.doc('john');

  FriendQuerySnapshot johnFriends = await johnRef.friends.get();
}

Constructors

Collection(String path, {String? name, String? prefix})
Defines a collection reference.
const
Collection.fromJson(Map<Object?, Object?> json)
Decode a Collection from a Map

Properties

hashCode → int
The hash code for this object.
no setterinherited
name → String?
The name of the generated collection field. Defaults to the last part of the collection path.
final
path → String
The firestore collection path
final
prefix → String?
The prefix to use for generated class names. Defaults to the type of T.
final
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited

Methods

noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited