【问题标题】:Flutter: Stream not retrieving data from sub collectionFlutter:流不从子集合中检索数据
【发布时间】: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 获得了正确的数据

标签: firebase flutter riverpod


【解决方案1】:

问题是我初始化的方式

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

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

【讨论】:

    猜你喜欢
    • 2019-06-04
    • 2021-06-28
    • 2021-03-10
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多