在我的flutter firebase应用程序中,我可以使用查询快照获取firebase中用户活动文档的长度。但是,我希望文档的数量能够实时更新,而无需用户刷新页面。我可以通过使用流生成器转换下面的代码来获得实时长度吗?我如何做到这一点?这是我现在使用的代码,它运行得很好,但没有实时更新。
//this is the code I want to convert to stream
//builder.
static Future<int> numActivities(String userId)
async {
QuerySnapshot userActivitiesSnapshot = await
activitiesRef
.document(userId)
.collection('userActivities')
.where('seen', isEqualTo: '')
.getDocuments();
return userActivitiesSnapshot.documents.length;
}
您需要使用docs
属性;返回包含CCD_ 3类的CCD_;,如下所示:
return userActivitiesSnapshot.docs.length;
要获得文档流,需要使用.snapshots((方法返回QuerySnapshot
的Stream
,而不是.getDocuments(((不赞成使用.get((方法,后者返回QuerySnapshot
的Future
。
然后,您可以将Stream<Snapshot>
映射到快照文档长度的流中。
你的numActivities
方法应该是这样的:
static Stream<int> numActivities(String userId) {
return activitiesRef
.document(userId)
.collection('userActivities')
.where('seen', isEqualTo: '')
.snapshots()
.map((documentSnapshot) => documentSnapshot.docs.length);
}
在您的用例中使用它,您需要监听流并更新_activityCount
变量。
_setUpactivityCount() async {
final String currentUserId =
Provider.of<UserData>(context, listen: false).currentUserId;
DatabaseService.numActivities(currentUserId).listen((activityCount) {
if (mounted) {
setState(() {
_activityCount = activityCount;
});
}
});
}
确保_activityCount
在其初始状态下为null。