Firebaseのフィールドの型をreferenceとした時に、authentication.usersの値で、StreamBuilderの返り値を絞り込みたい

前提

  • リストFlutterでアプリを作っており、Firestore Databaseと連携しようとしています。

実現したいこと

  • Firestore Databaseにおいて、usersとworksという2つのコレクションを作りました。

  • worksに、managerというフィールドを設け、そこにはusersの中の誰かが入るようにしたいです。

  • usersコレクションにおいて、ドキュメント名がabcdefgのユーザーがあるとします。

  • worksコレクションのmanagerフィールドのタイプの選択の所で「reference」を選び、値に「users/abcdefg」と書きました。

  • アプリの方で、自分自身がmanagerとなっているworksを表示するため、下記のコードを書きました。

dart

body: StreamBuilder<QuerySnapshot>( stream: FirebaseFirestore.instance .collection("works") .where("manager", isEqualTo: Authentication.currentFirebaseUser!) .snapshots(),

  • 上記のAuthentication.currentFirebaseUserは、Firebase Authenticationを通じてログインしたユーザーの情報を返しすもので、返り値の型はfirebase_authのUser型です。

発生している問題・エラーメッセージ

  • 実行しても、何も表示されず、Invalid argument: Instance of "User"というエラーが出ました。

試したこと

  • worksコレクションのmanagerフィールドのタイプの選択で「reference」ではなく「String」を選び、値を「abcdefg」と書き直しました。
  • そして、コードを下記のように修正した所、うまく動きました。

dart

body: StreamBuilder<QuerySnapshot>( stream: FirebaseFirestore.instance .collection("works") .where("manager", isEqualTo: Authentication.currentFirebaseUser!.uid) .snapshots(),

  • しかし、希望としては、フィールドのタイプはreferenceとしたいです。理由は、各所で、managerから引っ張ってきてそのユーザーに関する情報を使いたいからです。

もし、何かお気づきのことがありましたら、ご教示頂けるとありがたいですm(__)m

コメントを投稿

0 コメント