タイトルの通りなのですが、最近開発しているプロダクトで使用している Flamingoというライブラリが使いやすく個人的にお勧めだよという話です。 使い方などは以下のページに全て纏まっているため何がお勧めなのかという点で書いていきたいと思います。
https://pub.dev/packages/flamingo
本来、Createなどは以下のように書いていくと思いますが、
await firestore.collection('users').doc('testUser').set({
'firstName': 'John',
'lastName': 'Peter',
});
Flamingoはこのようなモデルを定義して、
import 'package:flamingo/flamingo.dart';
import 'package:flamingo_annotation/flamingo_annotation.dart';
part 'user.flamingo.dart';
class User extends Document<User> {
User({
String? id,
DocumentSnapshot? snapshot,
Map<String, dynamic>? values,
}) : super(id: id, snapshot: snapshot, values: values);
@Field()
String? name;
@override
Map<String, dynamic> toData() => _$toData(this);
@override
void fromData(Map<String, dynamic> data) => _$fromData(this, data);
}
こんな感じでCreateできます。
final user = User();
print(user.id); // id: Automatically create document id;
final user = User(id: '0000');
print(user.id); // id: '0000'
readはこんな感じで、
// get
final user = User(id: '0000'); // need to 'id'.
final hoge = await documentAccessor.load<User>(user);
リストの取得もこんな感じでできます。
final path = Document.path<User>();
final snapshot = await firestoreInstance.collection(path).get();
// from snapshot
final listA = snapshot.docs.map((item) => User(snapshot: item)).toList()
..forEach((user) {
print(user.id); // user model.
});
// from values.
final listB = snapshot.docs.map((item) => User(id: item.documentID, values: item.data)).toList()
..forEach((user) {
print(user.id); // user model.
});
他にもページング機能や、FireStoraげと連携した書き方ができ、コレクション名などもクラス化することで
わかりやすく扱えるためお勧めです!