前提
・自分がブロックしているユーザーを保存するコレクションを作る。コレクションの名前をここでは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;
コメントを残す