Saya telah mengikuti berbagai panduan untuk berhasil mendapatkan data dari koleksi Firestore dengan StreamProvider. Apa yang sepertinya tidak bisa saya pahami adalah bagaimana mendapatkan dokumen tunggal dan bidang terkaitnya.

Misalnya, katakanlah saya memiliki koleksi 'WeatherObs' dengan dokumen bernama '5-13-21' seperti yang ditunjukkan di bawah ini:

enter image description here

Jika saya ingin menarik seluruh koleksi dengan StreamProvider saya, saya dapat dengan mudah memasukkannya ke dalam daftar seperti ini:

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());

  }

Saya tidak bisa seumur hidup saya, bagaimanapun, mencari tahu bagaimana jika saya hanya ingin mengakses satu dokumen dengan cara yang sama. Saya bisa mendapatkan dokumen yang dapat diakses dalam kunci, pasangan nilai sehingga saya dapat menggunakan fromJson. Tetapi ketika saya mengakses objek Penyedia yang memanggil metode di kelas lain, selalu mengembalikan nol.

Stream<Weather> getWeather() {    

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

  }

Dalam contoh terakhir, saya tidak mengembalikan daftar, tetapi menurut saya daftar tidak diperlukan karena saya harus dapat mengakses objek cuaca dan mendapatkan akses ke atributnya seperti high (ketik String). Apakah mengakses satu dokumen dengan cara yang sama mungkin?

1
wnjl 14 Mei 2021, 05:34

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan tempat untuk memeriksa bidang unik pada dokumen Anda seperti kode ini

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());
}
1
Osama Abdelaziz 14 Mei 2021, 06:23