【问题标题】:Getting a single document out of Firestore in Flutter using a StreamProvider使用 StreamProvider 从 Flutter 中的 Firestore 中获取单个文档
【发布时间】:2021-08-04 06:40:53
【问题描述】:

我已按照各种指南使用 StreamProvider 成功地从 Firestore 集合中获取数据。我似乎不太明白如何获取单个文档及其相关字段。

例如,假设我有一个集合“WeatherObs”,其中包含一个名为“5-13-21”的文档,如下所示:

如果我想用我的 StreamProvider 拉入整个集合,我可以轻松地将它放入一个列表中,如下所示:

class FirestoreService {

  FirebaseFirestore _db = FirebaseFirestore.instance;
  var random = Random();

  Stream<List<Weather>> getWeather() {

   return _db.collection('TodaysWeather').snapshots().map((snapshot) => snapshot.docs.map((event) => Weather.fromJson(event.data())).toList());

  }

但是,我终其一生都无法弄清楚如果我只想以相同的方式访问单个文档。我能够以键值对的形式访问文档,因此我可以使用 fromJson。但是当我访问调用另一个类中的方法的Provider对象时,它总是返回null。

Stream<Weather> getWeather() {    

    return _db.collection('TodaysWeather').doc('5-13-21').snapshots().map((event) => FastFoodHealthEUser.fromJson(event.data()));      
   

  }

在最后一个示例中,我没有返回列表,但我认为列表不是必需的,因为我应该能够访问天气对象并访问其属性,例如高(字符串类型)。是否可以以相同的方式访问单个文档?

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    您可以使用 where 来检查文档中的唯一字段,例如此代码

    Stream<List<VehicleCommentSessionModel>> getSomeoneCommentsList(
       {@required String sellerId}) {
      return _fbd
         .collection('comments')
        .where('sellerId', isEqualTo: sellerId)
        .snapshots()
        .map((qSnap) => qSnap.docs
            .map((doc) => VehicleCommentSessionModel.fromJson(doc.data()))
            .toList());
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 2020-10-11
      • 1970-01-01
      • 2020-12-05
      • 2021-09-28
      • 1970-01-01
      • 2021-07-20
      • 2022-07-22
      • 2019-09-17
      相关资源
      最近更新 更多