这是我的实时数据库的结构。
在Flutter(ios)中,我尝试使用以下代码创建参考:
final tempRef = FirebaseDatabase.instance.reference().child("temp_hum");
然后,我遵循通用协议,使用下面的代码侦听数据库中的更改,并且我无法通过事件_onIncomingEvent获取print语句来正常工作
class _TemperatureProgressState extends State<TemperatureProgress> {
List<Temperature> tempList;
StreamSubscription<Event> _onTempSubscription;
_onIncomingTemp(Event event) {
print('event: ' + event.snapshot.toString());
}
@override
void initState() {
super.initState();
tempList = new List();
_onTempSubscription = tempRef.onChildAdded.listen(_onIncomingTemp);
print('sup');
}
}
有任何想法吗?我在想以下错误之一:-我的代码可能是错误的-我没有使用child('temp_hum')正确创建我的Firebase引用-我什至可能没有连接到正确的数据库?
更新1:-我发现我指向的GoogleService-Info.splist
文件中的数据库URL错误。虽然仍然无法获取传入数据
更新2:-现在,我可以通过侦听来获取数据.then()
。但是,我只获得一次数据,有没有办法继续监听?
tempRef.once().then((DataSnapshot snapshot){
print('data: ${snapshot.value}');
});
找到解决方案,代码将在下面。就像弗兰克在评论中说的那样,Once()仅会查询一次,因此它将用于从get请求中检索数据。我的要求是不断聆听数据。只是一条额外的信息,limitToLast(1)
将接收最新的数据,而不是接收从您正在“侦听”的任何集合到Firebase的实时数据库的所有信息。
tempRef.limitToLast(1).onValue.listen((Event event) {
Map data = event.snapshot.value;
data.forEach((index, data) => {
print('weight data: ${data}'),
setState((){
weightList.add(new Weight(data['avg_weight'], data['hive_weight'], data['object_id'], data['time'], data['user_id']));
})
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句