Я хочу получать данные в реальном времени из Firebase Firestore, я пытаюсь использовать поток, но, похоже, не могу их получить - PullRequest
0 голосов
/ 15 февраля 2020

Я абсолютный новичок в этом, поэтому, пожалуйста, помогите. Моя цель заключается в том, чтобы добиться создания нового документа внутри коллекции под названием «Датчики» в Firestore, каждый раз, когда регистрируется новый пользователь. Я могу это сделать, но затем я хочу получить поле документа только с указанным идентификатором пользователя c. Я также попробовал следующий код, но он получает мне список всех созданных документов, я хочу только один конкретный документ с определенным идентификатором пользователя.

Следующее решение, которое я пробовал, было от youtuber TheNetNinja, но оно получает все список всех документов в моей коллекции:

  //sensor list from snapshot
  List<Sensor> _sensorListFromSnapshot(QuerySnapshot snapshot) {
    return snapshot.documents.map((doc) {
      return Sensor(
        fireRead: doc.data['fireRead'] ?? false,
        airQuality: doc.data['airQuality'] ?? 0,
        carbonMonoxide: doc.data['carbonMonoxide'] ?? 0,
        lpg: doc.data['lpg'] ?? 0,
        smoke: doc.data['smoke'] ?? 0,
      );
    }).toList();
  }

  //get sensors stream
  Stream<List<Sensor>> get sensors {
    return sensorData.snapshots().map(_sensorListFromSnapshot);
  }

Итак, я решил попробовать следующий код, просто угадав, потому что я действительно не понимаю этих потоков-провайдеров и других классов дротика-флаттера:

 Sensor specificSensorFromSnapshot(DocumentSnapshot event) {
    return Sensor(
      fireRead: event.data['fireRead'] ?? false,
      airQuality: event.data['airQuality'] ?? 0,
      carbonMonoxide: event.data['carbonMonoxide'] ?? 0,
      lpg: event.data['lpg'] ?? 0,
      smoke: event.data['smoke'] ?? 0,
    );
  }

  Stream<Sensor> get sensor {
    final DocumentReference specificSensorData =
        Firestore.instance.collection('sensors').document(uid);
    return specificSensorData.snapshots().map(specificSensorFromSnapshot);
  }

У меня есть класс модели под названием Sensor:

class Sensor {
  final int airQuality;
  final bool fireRead;
  final int carbonMonoxide;
  final int smoke;
  final int lpg;

  Sensor(
      {this.fireRead,
      this.smoke,
      this.carbonMonoxide,
      this.airQuality,
      this.lpg});
}

My Firebase Firestore database structure

1 Ответ

0 голосов
/ 17 февраля 2020

Существует множество способов возврата документов с использованием идентификатора документа.

Я бы порекомендовал вам взглянуть на приведенные ниже вопросы, на которые уже ответило сообщество. Это не совсем ваш случай - они написаны на других языках программирования - но они должны предоставить вам некоторые подходы к тому, как вернуть только документы с указанным c идентификатором, в вашем случае идентификатором от пользователя.

Дайте мне знать, помогла ли вам информация!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...