Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何在颤振时返回流中的对象列表_Dart_Flutter_Google Cloud Firestore_Rxdart - Fatal编程技术网

Dart 如何在颤振时返回流中的对象列表

Dart 如何在颤振时返回流中的对象列表,dart,flutter,google-cloud-firestore,rxdart,Dart,Flutter,Google Cloud Firestore,Rxdart,我有以下firestore结构和从DB获取用户提要的方法 我需要像你一样控制我的流 首先是来自用户/FeedIDs集合的所有提要ID 然后,对于每个feedID,获取feed详细信息的文档并返回到它们的列表 我可以找到解决这个问题的方法,因为toList不起作用或者我做错了什么 // User Collection - User - RandomDocumentID - Feed - FeedIDasDocumentID - field1

我有以下firestore结构和从DB获取用户提要的方法

我需要像你一样控制我的流

首先是来自用户/FeedIDs集合的所有提要ID

然后,对于每个feedID,获取feed详细信息的文档并返回到它们的列表

我可以找到解决这个问题的方法,因为toList不起作用或者我做错了什么

// User Collection
- User
   - RandomDocumentID
      - Feed
         - FeedIDasDocumentID
           - field1
           - field2
             .
             .

// Feed Collection
- Feed
   - RandomDocumentID
      - field1
      - field2
        .
        .

// Method in my repository to get feed for User
Observable<Feed> getCurrentUserFeed(String uid) {
    return Observable(Firestore.instance
          .collection('User')
          .document(uid)
          .collection("FeedIDs")
          .snapshots()
          .expand((snapshots) => snapshots.documents)
          .map((document) => UserFeed.fromMap(document.data))
        )
        .flatMap((userFeed) => Firestore.instance
                               .collection("Feed")
                               .document(userFeed.id)
                               .snapshots()
        )
        .map((document) => Feed.fromMap(document.data));
        // ????
        // I tried to put .toList() and of the stream but it is not working, 
       // i wanna return List<Feed> instead of every single feed object
  }


// in my BLoC
// I had to do that because I could acquire to get streams elements as a list
// 
List<Feed> feedList = List();
FirebaseUser user = await _feedRepository.getFirebaseUser();
_feedRepository.getCurrentUserFeed(user.uid).listen((feed) {
    feedList.add(feed);
    dispatch(UserFeedResultEvent(feedList));
 };

如果有任何其他链接方法,请分享。谢谢

我认为问题在于Firestore设置为在记录更改时发送更新。当您查询快照时,它是一个永远不会发送已完成事件的流,因为新的更新总是会出现


如果流不发送一个done事件,那么流上返回Future的一些方法将永远不会完成。这些包括.单身和.托利斯。您可能正在寻找。第一个将在第一个事件通过流发送后完成,即数据库中记录的当前状态,并停止侦听更改。

我认为这里的问题是Firestore设置为在记录更改时发送更新。当您查询快照时,它是一个永远不会发送已完成事件的流,因为新的更新总是会出现


如果流不发送一个done事件,那么流上返回Future的一些方法将永远不会完成。这些包括.单身和.托利斯。您可能正在寻找。first,它将在第一个事件通过流发送后完成数据库中记录的当前状态,并停止侦听更改。

您已经在使用stream.map,这是对流中元素的链接计算的答案。我认为你的问题措辞更恰当,因为为什么Firestore的流不发出一个已完成的事件?我认为快照流的目的是永远不会结束,因为它会在集合得到更新时发出信号。您可能需要.snapshots.first来获取当前文档的列表。谢谢@NateBosch的建议。实际上,有两个问题。第二个问题是为什么onDone没有被发射,正如你说的,它是一个连续的流,这就是为什么它没有被发射。我以前是单身来修好的。第二个问题是,假设用户有5个提要,我想返回一个提要列表,而不是返回每个提要。你知道吗,因为,托利斯。无法工作?原因是。toList无法完成是因为缺少完成事件。我想单身也不算完整。首先应该完成。谢谢!我想这就是问题的答案。如果您将其作为答案来写,我接受它。您已经在使用stream.map,这是对流中元素的链接计算的答案。我认为你的问题措辞更恰当,因为为什么Firestore的流不发出一个已完成的事件?我认为快照流的目的是永远不会结束,因为它会在集合得到更新时发出信号。您可能需要.snapshots.first来获取当前文档的列表。谢谢@NateBosch的建议。实际上,有两个问题。第二个问题是为什么onDone没有被发射,正如你说的,它是一个连续的流,这就是为什么它没有被发射。我以前是单身来修好的。第二个问题是,假设用户有5个提要,我想返回一个提要列表,而不是返回每个提要。你知道吗,因为,托利斯。无法工作?原因是。toList无法完成是因为缺少完成事件。我想单身也不算完整。首先应该完成。谢谢!我想这就是问题的答案。如果你写下来作为答案,我接受。