firestore_model 0.4.0
firestore_model: ^0.4.0 copied to clipboard
Firestore Model easy to use firestore collections by model data
firestore_model #
Easy way to use firestore collection with data model
Adding Firestore Model to your project #
In your project's pubspec.yaml file,
- Add firestore_model latest version to your dependencies.
# pubspec.yaml
dependencies:
firestore_model: ^<latest version>
Config #
void main() async {
await FirebaseApp.initializeApp(
settings: FirestoreModelSettings(
//persistenceEnabled: true,
));
runApp(MyApp());
}
Data Model #
- define your model
User - extend model with
FirestoreModelwith your model Type
class User extends FirestoreModel<User> {
}
- override
toMap&&responseBuilder
class User extends FirestoreModel<User> {
String? firstName;
String? lastName;
User({this.firstName, this.lastName});
// use to read
User.fromMap(Map<String, dynamic> map) {
this.firstName = map['first_name'];
this.lastName = map['last_name'];
}
// use to write
@override
Map<String, dynamic> get toMap => {
'first_name': this.firstName,
'last_name': this.lastName,
};
@override
ResponseBuilder<User> get responseBuilder => (map) => User.fromMap(map);
}
- we use model name as collection name in this example
User - if you wont to change collection name override
collectionNamein your model
@override
String get collectionName => 'users';
Inject Model #
- Inject your Model
FirestoreModel.inject(User());
- Inject All your Models
FirestoreModel.injectAll([User()]);
- retrieve your model
FirestoreModel.use<User>();
Create #
To Write in data base:
- prepare your data model like this:
User user = User(firstName: "Mohamed", lastName: "Abdullah 3");
- call
createmethod from your model like this:
user.create();
- if you have id for doc:
user.create(docId: 'hdoihvnoirejiu9345j');
Save #
- make changes to your model and call
save:
user.firstName = 'new firstname';
user.save()
Update #
- update specific fields in your model call
update:
user.update(data: {
"first_name": "Mohamed",
"last_name": "Abdullah"
})
- update specific model use
updateby pass docId:
FirestoreModel.use<User>().update(
docId: 'hdoihvnoirejiu9345j',
data: {
"first_name": "Mohamed",
"last_name": "Abdullah"
})
delete #
- delete current model call
delete:
user.delete();
- delete specific model use
deleteby pass docId:
FirestoreModel.use<User>().delete(docId: 'hdoihvnoirejiu9345j')
Exists #
- check if document is exists call
existsby docId:
bool isExists = await FirestoreModel.use<User>().exists('hdoihvnoirejiu9345j')
Find #
- To get document data by document id call
find:
User user = await FirestoreModel.use<User>().find('hdoihvnoirejiu9345j')
- To stream document data by document id call
streamFind:
Stream<User> streamUser = FirestoreModel.use<User>().streamFind('hdoihvnoirejiu9345j')
All #
- To get all documents call
all:
List<User> users = await FirestoreModel.use<User>().all()
- To stream all documents call
streamAll:
Stream<List<User>> streamUsers = FirestoreModel.use<User>().streamAll()
First #
- To get first result from your collection call
first: - you can build your query like
whereorderByor any query buildr methods:
User firstUser = await FirestoreModel.use<User>().first(
queryBuilder: (query) => query.where('score', isGreaterThan: 100)
.orderBy('score', descending: true)
);
Get #
- To get results from your collection call
get: - you can build your query like
whereorderByor any query buildr methods:
List<User> topUsers = await FirestoreModel.use<User>().get(
queryBuilder: (query) => query.orderBy('score', descending: true).limit(10)
);
- To stream results from your collection call
streamGet:
Stream<List<User>> topUsers = await FirestoreModel.use<User>().streamGet(
queryBuilder: (query) => query.orderBy('score', descending: true).limit(10)
);
Pagination #
- To get results limit and load more as pagination from your collection call
paginate. - you can build your query like
whereorderByor any query buildr methods. - you can set
perPagein your call or set in your model
List<User> topUsers = await FirestoreModel.use<User>().paginate(
perPage: 15,
queryBuilder: (query) => query.orderBy('score', descending: true),
);
- To stream results from your collection call
streamPaginate:
Stream<List<User>> topUsers = await FirestoreModel.use<User>().streamPaginate(
perPage: 15,
queryBuilder: (query) => query.orderBy('score', descending: true),
);