首页 > 解决方案 > Flutter:流不从子集合中检索数据

问题描述

我正在创建自己的评论系统。我正在使用 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 和其他奇怪的东西。试图看看我是否能发现错误,但没有运气)

我使用 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 的图片,用于描述路径 Challenges/{ChallengeID}/comments/{CommentID}/SubComments

在此处输入图像描述 代码只是停留在加载中,没有得到任何值。

标签: firebaseflutterriverpod

解决方案


问题是我初始化的方式

final ReadSubCommentClass parameters = ReadSubCommentClass(challenge: widget.challenge, comment: widget.comment!);

将其移至 initState() 后,它开始工作,并在 UI 上获得输出


推荐阅读