使用 StreamProvider 从 Flutter 中的 Firestore 中获取单个文档

时间:2021-05-14 02:34:19

标签: firebase flutter google-cloud-firestore

我遵循了各种指南,通过 StreamProvider 从 Firestore 集合中成功获取数据。我似乎不太明白如何获取单个文档及其相关字段。

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

enter image description here

如果我想用我的 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()));      
   

  }

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

1 个答案:

答案 0 :(得分: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());
}