Flutter×FireStoreでユーザーのブロック機能を作る

NO IMAGE

前提

・自分がブロックしているユーザーを保存するコレクションを作る。コレクションの名前をここではblocksとします

・自分の投稿を保存するコレクションを作る。コレクションの名前をここではpostsとします

 

考え方

1. blocksから自分がブロックしているユーザー一覧を取得

2.  自分がブロックしているユーザーのIDだけが入ったListを作る

 

List _blockedIds = [];

//blocksから自分がブロックしているユーザー一覧を取得
CollectionReference collections =  FirebaseFirestore.instance.collection('blocks')
QuerySnapshot snapshot = await collections
        .where('user_id', isEqualTo: user_id)
        .get();

//自分がブロックしているユーザーのIDだけが入ったListを作る
snapshot.docs.forEach((DocumentSnapshot doc) {
      _blockedIds.add(doc['blocked_uid']);
});

3.postsから投稿を取得する

 

/*ブロックしているユーザーの取得*/
List _blockedIds = [];

//blocksから自分がブロックしているユーザー一覧を取得
CollectionReference collections =  FirebaseFirestore.instance.collection('blocks')
QuerySnapshot snapshot = await collections
        .where('user_id', isEqualTo: user_id)
        .get();

//自分がブロックしているユーザーのIDだけが入ったListを作る
snapshot.docs.forEach((DocumentSnapshot doc) {
      _blockedIds.add(doc['blocked_user_id']);
});


/* 投稿の取得 */
List _viewablePosts = [];

CollectionReference collections = FirebaseFirestore.instance.collection('posts');
QuerySnapshot snapshot = await collections.get();

_viewablePosts = snapshot.docs;

4. ブロックしていないユーザーの投稿に絞り込む

 

/*ブロックしているユーザーの取得*/
List _blockedIds = [];

//blocksから自分がブロックしているユーザー一覧を取得
CollectionReference collections =  FirebaseFirestore.instance.collection('blocks')
QuerySnapshot snapshot = await collections
        .where('user_id', isEqualTo: user_id)
        .get();

//自分がブロックしているユーザーのIDだけが入ったListを作る
snapshot.docs.forEach((DocumentSnapshot doc) {
      _blockedIds.add(doc['blocked_user_id']);
});


/* 投稿の取得 */
List _viewablePosts = [];

CollectionReference collections = FirebaseFirestore.instance.collection('posts');
QuerySnapshot snapshot = await collections.get();

_viewablePosts = snapshot.docs;


/* ブロックしていないユーザーの投稿に絞り込む */

List _result = [];

//そもそもブロックしていない場合はそのまま投稿一覧を返す
if (_blockedIds.isEmpty) {
      return _viewablePosts;
}

_viewablePosts.forEach((post) {
     if (!_blockedIds.contains(post['user_id'])) {
        _result.add(post);
    }
});

return _result;

Flutterカテゴリの最新記事