问题描述
我正在创建自己的评论系统。 我正在使用 firebase 存储评论,然后将回复存储到子集合中。 我的代码正在检索主要评论,但由于某种原因我无法获得子评论。 仔细检查了路径和所有内容。
我的流看起来像这样
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 和其他奇怪的东西。试图看看我是否能发现错误,但没有运气)
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}/comments/{CommentID}/SubComments
代码只是停留在 Loading 并且没有获得任何值。
解决方法
问题在于我的初始化方式
final ReadSubCommentClass parameters = ReadSubCommentClass(challenge: widget.challenge,comment: widget.comment!);
在我将它移动到 initState() 之后,它开始工作并且我在 UI 上获得输出