Я абсолютный новичок в этом, поэтому, пожалуйста, помогите. Моя цель заключается в том, чтобы добиться создания нового документа внутри коллекции под названием «Датчики» в 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});
}