如何在 Flutter Firestore 中查询 2 个文档并作为列表返回?

Posted

技术标签:

【中文标题】如何在 Flutter Firestore 中查询 2 个文档并作为列表返回?【英文标题】:How may I query 2 documents in Flutter Firestore and return as a List? 【发布时间】:2020-11-04 14:07:19 【问题描述】:

Flutter 和 Dart 世界的新手。

我正在尝试从一个集合(会话)中查询另一个用户集合,其中每个会话只能有一个用户。我想获取每个会话,添加用户数据并返回到我的 Future>.

我有会话和用户的模型,我能够提取会话文档,然后能够使用用户信息形成我的会话,但是我没有运气返回正确的数据。看起来我的查询很好,但是我返回的数据是以 List > 而不是 List 的形式出现的。

会话模型

 Sessions(
      this.id,
      this.title,
      this.datetime,
      this.userName,
      this.userImage);

  factory Sessions.fromJson(DocumentSnapshot doc, userName, userImage) 
    String id = doc.documentID;
    Map json = doc.data;
    return Sessions(
      id: id,
      title: json['title'],
      datetime: json['datetime'].toDate(),
      userName: userName,
      userImage: userImage,
    );
  

Firebase 查询

Future<List<Sessions>> getSessions() async 
    // Getting Sessions
    final result = await _liveSessionsRef
        .where('isFeatured', isEqualTo: true)
        .getDocuments();

    // Querying from Users and returning Sessions with User Id and User Image
    final data = result.documents.map((doc) async 
      return await _userCollectionRef
          .document(doc.data['id'])
          .get()
          .then(
        (value) 
          return Sessions.fromJson(doc, value.data['name'], value.data['image']);
        ,
      );
    ).toList();
  
return data;

【问题讨论】:

哪个方法返回 List @PeterHaddad 抱歉,括号弄乱了一些单词。编辑代码。 【参考方案1】:
Future<List<Sessions>> getSessions() async 
    // Getting Sessions
    final result = await _liveSessionsRef
        .where('isFeatured', isEqualTo: true)
        .getDocuments();

    // Querying from Users and returning Sessions with User Id and User Image
    final data = Future.wait(result.documents.map((doc) 
      return _userCollectionRef
          .document(doc.data['id'])
          .get()
          .then(
        (value) 
          return Sessions.fromJson(doc, value.data['name'], value.data['image']);
        ,
      );
    ).toList());
  
return data;

【讨论】:

我收到另一个类型错误。返回类型“Set>>”不是闭包上下文所要求的“FutureOr>”。 像魅力一样工作!我的错!

以上是关于如何在 Flutter Firestore 中查询 2 个文档并作为列表返回?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter Firestore 中查询 2 个文档并作为列表返回?

Flutter Firestore 复合查询

在 Firestore 查询中 Flutter 传递文档 ID

FLUTTER,FIRESTORE:我有一个流构建器,它从集合中的所有文档中返回某个字段..如何添加查询?

如何在flutter中获取firestore文档的documentid?

如何使用flutter更新firestore中所有文档的单个字段?