我有两个应用程序可以访问同一个 Firestore 数据库。 “用户”应用程序侦听对集合中文档的更改,该集合在“管理员”应用程序创建之前不存在。代码如下:
Stream<DocumentSnapshot>logStream = FirebaseFirestore.instance
.collection('companies')
.doc(companyId)
.collection('log')
.doc(DateFormat('yyyy-MM-dd').format(DateTime.now()))
.snapshots();
}
问题是我无法开始收听“logStream”,除非它存在。
有没有办法检查它何时创建然后开始收听?
答案 0 :(得分:0)
您无法在创建文档后立即开始收听流,这不是 Firestore 本身支持的。因此,为了做到这一点,您将创建一个偶尔调用的函数来检查它,直到它被创建,这个函数将创建一个 import I18n from 'i18n-js';
import tr from './tr';
import en from './en';
import ar from './ar';
I18n.fallbacks = true;
I18n.locale = 'tr';
I18n.translations = {
tr,
en,
ar,
};
const $t = (key, params = {}) => {
return I18n.t(key, params );
};
const changeEnglish = () => {
I18n.locale = 'en';
};
export {$t, I18n, changeEnglish};
,检查文档是否存在,如果积极开始收听
您可以使用 get()
,如评论中所述,在此之前侦听“空”流而不触发任何操作,但仍需要调用以检查前面提到的文档是否存在,因此您的代码可以如下所示:
StreamCompleter
如果在文档存在之前您无法继续执行应用程序,您可以创建一个持续调用 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());
}
}
}
直到流准备好。