Saya memiliki dua aplikasi yang mengakses database firestore yang sama. Aplikasi 'Pengguna' mendengarkan perubahan pada dokumen dalam koleksi yang tidak ada hingga aplikasi 'Admin' membuatnya. Berikut kodenya:

        Stream<DocumentSnapshot>logStream = FirebaseFirestore.instance
            .collection('companies')
            .doc(companyId)
            .collection('log')
            .doc(DateFormat('yyyy-MM-dd').format(DateTime.now()))
            .snapshots();
      }

Masalahnya adalah saya tidak bisa mulai mendengarkan 'logStream' kecuali itu ada.

Apakah ada cara untuk memeriksa kapan itu dibuat dan kemudian mulai mendengarkan?

1
Eric 11 Mei 2021, 10:27

1 menjawab

Jawaban Terbaik

Anda tidak dapat mulai mendengarkan streaming segera setelah dokumen dibuat, itu bukan sesuatu yang didukung Firestore secara asli. Jadi untuk melakukan ini, Anda harus membuat fungsi create yang dipanggil secara sporadis untuk memeriksa ini sampai dibuat, fungsi ini akan membuat get(), periksa apakah dokumen ada dan jika positif mulai mendengarkan saya t.

Anda dapat menggunakan StreamCompleter, seperti yang disebutkan dalam komentar, untuk mendengarkan aliran "kosong" sebelum itu tanpa memicu tindakan apa pun, tetapi panggilan untuk memeriksa keberadaan dokumen yang disebutkan sebelumnya masih perlu dilakukan, jadi Anda kode dapat terlihat seperti ini:

var db = FirebaseFirestore.instance;
var completer = StreamCompleter<DocumentSnapshot>();
Stream<DocumentSnapshot>logStream = completer.stream();
// this function will need to be called sporadically
checkDocumentExists(completer);

checkDocumentExists(completer){
    var reference = db.collection('companies')
                      .doc(companyId)
                      .collection('log')
                      .doc(DateFormat('yyyy-MM-dd').format(DateTime.now()));
    reference.get() => then(function(document) {
        if(document.exists){
            completer.setSourceStream(reference.snapshots());
        }
    }
}

Jika Anda tidak dapat melanjutkan eksekusi aplikasi hingga dokumen ada, Anda dapat membuat panggilan terus checkDocumentExists hingga streaming siap.

0
Rafael Lemos 11 Mei 2021, 13:29