投稿に対して、いいねされているユーザーの名前を表示する。

NoCodeFAQ のより頂きました回答です

今回やること

FlutterFlowを使用して、特定の投稿に「いいね」をしたユーザーの名前を表示する機能を実装します。これにより、ユーザーは誰が投稿を気に入ったかを簡単に確認できるようにしてます。

今回Post→PostDetailへの遷移はできるものとして説明をしてます。
この辺りは、公式ドキュメント PassingDataを見て下さい

データの準備

  • 既存の「Post」コレクションと「Like」コレクションがあることを確認します。
  • 「User」コレクションに user_name フィールドがあることを確認します。
    今回は、以下のデータを使ってます。

*Likeの数字がカウントされる方法については、aanyaの動画などを参考にしてください。基本はToggle動作を行うだけです。

PageDetailのクエリの作成

まず、少し寄り道して、Flutterのクエリの動作について確認しておきます。
今回の動作については、以下の流れになります。

  • 「いいねしたユーザー」のListViewに対して新しいクエリ(likelist)を作成します。
  • フィルター条件として post_id が現在表示中の投稿IDと一致するものを選択します。

ユーザー情報の取得

  • 上記のクエリに「User」コレクションとのjoinを追加します。
  • join条件は Like.user_id = User.id とします。
  • 取得するフィールドとして User.user_name を選択します。

以上です。つまり、
まずはPostドキュメントの一覧から、
現行のCurrentDataのDocumentidと同じものをフィルタリングし、そのフィルタリングされたDocumentからUserを表示している。という流れになります。

では、FlutterFlowでやっていきましょう。

これで、いいねしたUserのドキュメントIDのみ取得することができました。
このまま表示してもIDだけになるので、ここからテキストウィジェットに対してさらにクエリをさせていきます。

これで、完成です。

まとめ

簡単そうですが、クエリの構成がわからないと、ちょっと苦戦しそうな、内容でしたね。クエリを2回使うのがSQLで慣れているとちょっとイメージつきにくいかもしれません。ここからさらに、この基本的な実装を拡張して、ユーザープロフィールへのリンクを追加したり、いいねの時間順に表示したりするなど、より高度な機能を追加することも可能です。

この記事を書いた人

tsubasatwi( つばさ)

国立工業高専卒業(新居浜工業高等専門学校)
「イベント×IT×営業」のカスタマーサクセスマネージャーとして活躍。セールス→構築管理運用まで全体プロジェクト管理の豊富な経験あり。

・主にITに関するイベント集客/法人営業/開発を担当
・大手通信会社を中心にエンタープライズのIT導入を担当(B2B)

DMMで日本初の NoCodeサロン を運営
「NoCodeCamp プログラミングを使わないIT開発 」
https://lounge.dmm.com/detail/2549/