我正在尝试在博客应用中实现一项功能,用户可以在其中发布“仅关注者”帖子。如果仅关注者,则只有关注者可以看到该帖子,否则,每个人都可以看到它。目前,我提出了一个解决方案,但是如果它是一种有效的方法,例如在数据库的安全规则中执行此操作,那么我就不会这样做。我不知道在数据库规则中编写函数。
我试图通过在源代码本身中添加一条带有if-else
语句的规则来实现此功能。
Future _checkFollowing() async {
List<DocumentSnapshot> _checkFollow = [];
Query q = Firestore.instance
.collection('user')
.document(ownerId)
.collection('followers')
.where('profileId', isEqualTo: uid);
QuerySnapshot querySnapshot = await q.getDocuments();
_checkFollow = querySnapshot.documents;
if (_checkFollow.length == 1) {
setState(() {
isFollowing = true;
});
} else if (_checkFollow.length == 0) {
setState(() {
isFollowing = false;
});
}
}
if (followersOnlyPost) {
if (isFollowing) {
return buildPost();
} else if (!isFollowing) {
return null;
}
} else if (!followersOnlyPost) {
return buildPost();
}
我对数据库中的每个用户都有一个followers
子集合。
一个帖子集合,其中每个帖子中都有一个followers-only
布尔字段。
这就是我创建帖子文档的方式
Firestore.instance.runTransaction((transaction) {
var reference = Firestore.instance.collection('all_posts');
reference.add({
'timestamp': DateTime.now(),
'likes': {},
'followersOnly': false,
'bookmarks': {},
'likesCount': 0,
'ownerId': uid,
}).then((DocumentReference doc) {
String docId = doc.documentID;
reference.document(docId).updateData({"postId": docId});});
我的代码可以实现我想要的功能,但是对于每个帖子,都会调用函数_checkFollowing
,因此,每个帖子都将其视为1读取。
由于Feed中会有很多帖子,因此会导致大量的阅读计数。
我也想实现块功能,但是我还没有实现,因为我不知道该怎么做。
答案 0 :(得分:0)
我要做的是在加载应用程序时检查用户的关注对象(如果有互联网连接),并将其存储在sqlite数据库中。然后,当它检查帖子是否为“仅关注者”时,您可以从sqlite数据库中进行本地检查,而不必调用数据库。这种方法意味着每次打开应用程序时,您只会得到一个数据库调用。