• 2ヶ月前

Flutter FlamingoというFireStore Model ライブラリをお勧めする話

タイトルの通りなのですが、最近開発しているプロダクトで使用している Flamingoというライブラリが使いやすく個人的にお勧めだよという話です。 使い方などは以下のページに全て纏まっているため何がお勧めなのかという点で書いていきたいと思います。


https://pub.dev/packages/flamingo

1.CRUDが楽

本来、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げと連携した書き方ができ、コレクション名などもクラス化することで
わかりやすく扱えるためお勧めです!

yass

Flutter/Android/Nuxt/Django/Firebase/iOS

東京、武蔵野市にあるWebサイト制作、Webシステム開発、モバイルアプリ開発、システム設計、構築、ITコンサルティングを行なっている会社です。 開発会社、ベンチャー、フリーランスで10年以上フルスタックエンジニアとして開発してきた代表が理想とする開発基盤、システム運用手法、最新技術を取り入れ、受託開発や自社サービスの開発を行っています。

info@lorchestra.dev
042-266-2750(代表)