我想检查Firebase数据库是否已连接,所以我必须使用Future来返回布尔值
检查一下我的代码。
@override
Future<bool> isAvailable() async {
bool ret = false;
await firebaseInstance.reference().child('.info/connected').onValue.listen((event) {
ret = event.snapshot.value;
});
return ret;
}
firebaseInstace.reference是一种StreamSubscription类型,它不等待将来向我返回结果。
请帮助。
答案 0 :(得分:2)
如果您只需要知道当前值,请使用once().then
代替onValue.listen
@override
Future<bool> isAvailable() async {
var snapshot = await firebaseInstance.reference().child('.info/connected').once();
return snapshot.value;
}
答案 1 :(得分:0)
您可以将StreamSubcription放在变量中
StreamSubscription subscription = someDOMElement.onSubmit.listen((data) {
// you code here
if (someCondition == true) {
subscription.cancel();
}
});
答案 2 :(得分:0)
您可以执行以下操作:
@override
Future<bool> isAvailable() async {
bool ret = false;
Stream<Event> events =
FirebaseDatabase.instance.reference().child('.info/connected').onValue;
await for (var value in events) {
ret = value.snapshot.value;
}
return ret;
}
onValue
返回一个Stream<Event>
,然后您可以使用await for
在Stream中进行迭代并获取数据,然后它将返回。
答案 3 :(得分:0)
不用等待流订阅的结束(它永远不会结束),只需取first
值:
@override
Future<bool> isAvailable() => firebaseInstance.reference().child('.info/connected').onValue.first;