【发布时间】:2021-07-20 12:27:13
【问题描述】:
我正在创建自己的评论系统。 我正在使用 firebase 存储 cmets,然后将回复存储到子集合中。 我的代码正在检索主 cmets,但由于某种原因我无法获得子 cmets。 仔细检查了路径和所有内容。
我的直播是这样的
var retVal;
try {
retVal = FirebaseFirestore.instance
.collection('Challenges')
.doc(challenge.id)
.collection('comments')
.doc(comment.id)
.collection('SubComments')
.orderBy(CommentField.createdTime, descending: true)
.snapshots()
.transform(Utils.transformer<Comment>(Comment.fromJson));
return retVal;
} on FirebaseException catch (e)
{
print(e.toString());
return retVal;
}
}
(注意 var 和其他奇怪的东西。试图看看我是否能发现错误,但没有运气)
我使用 Riverpod 调用流的代码。
final challengeSubCommentStreamProvider =
StreamProvider.autoDispose.family<List<Comment>, ReadSubCommentClass>((ref, parameters) {
final database = ref.watch(databaseProvider);
return database.readSubComments(parameters.challenge, parameters.comment);
});
return Consumer(
builder: (context, ScopedReader watch, child){
final userDataProvider = watch(userProvider);
final user = userDataProvider.user;
final ReadSubCommentClass parameters = ReadSubCommentClass(challenge: widget.challenge, comment: widget.comment!);
final challengeSubCommentStream = watch(challengeSubCommentStreamProvider(parameters));
return challengeSubCommentStream.when(
data: (comments) {
if(comments.isNotEmpty)
return SliverList(
delegate: SliverChildBuilderDelegate(
(context, int index){
return buildReplyCommentListTile(comments[index], user);
},
childCount: comments.length,
),
);
else return Container(color: Colors.blue,);
},
loading: () => SliverToBoxAdapter(child: Center(child: Text('Loading'),)),
error: (_,__) => SliverToBoxAdapter(child: Container()));
},
);
来自 Firestore 的图片来描述路径 挑战/{ChallengeID}/cmets/{CommentID}/SubComments
【问题讨论】:
-
所以我 100% 确定它正在获取数据,因为如果我在变压器处停下来,我会看到它在我那里的 2 个文档之间循环。所以它只是停留在加载
-
您的流是否有可能永远不会返回数据?我知道您说它正在获取数据,但是卡在加载中将是您的流未返回的症状。也许尝试取出转换器,看看是否可以将原始 Firebase 数据作为流返回?
-
检查了所有这些,问题是由于某种原因正在初始化参数值。即使我在变压器中看到我从 firebase 获得了正确的数据