firebase-realtime-database - Flutter Firebase 数据库错误的时间戳顺序
问题描述
我正在尝试将时间戳设置到firebase实时数据库中,但是当我检索时,不是按时间戳排序。我确实喜欢这样。
FirebaseDatabase.instance.reference().child('path').push().set({
'timestamp': ServerValue.timestamp
});
这是节点
然后我像这样检索。
FirebaseDatabase.instance.reference().child('path').orderByChild('timestamp').once().then((snap) {
print(snap.value);
});
但输出是这样的
{-LJhyfmrWVDD2ZgJdfMR: {timestamp: 1534074731794}, -LJhyWVi6LddGwVye48K: {timestamp: 1534074689667}, -LJhzDlvEMunxBpRmTkI: {timestamp: 1534074875091}
这些不是按时间戳排序的。我错过了什么吗?否则这是firebase错误还是颤振?
解决方案
数据以正确的顺序检索到DataSnapshot
. 但是当您snap.value
从快照中调用信息时,必须将其转换为 a Map<String, Object>
,它不再可以保存有关子节点顺序的信息。
要保持顺序,您必须DataSnapshot
使用循环处理子节点。我(根本)不是 Flutter 方面的专家,但我无法快速找到一种方法来为价值事件执行此操作。所以你可能想改为听.childAdded
:
FirebaseDatabase.instance
.reference()
.child('path')
.orderByChild('timestamp')
.onChildAdded
.listen((Event event) {
print(event.snapshot.value);
})
推荐阅读
- c# - 如何在 StackPanel 中使用 DateTime 字符串格式?
- azure-service-fabric - 如何处理 Reliable Actors 或有状态的 Reliable Service 中的长期操作以及“重新处理”失败状态
- javascript - 没有反应路由器的反应隐藏组件
- asp.net-mvc - @Html.Actionlink 添加类时更改控制器的链接
- javascript - Cat 未被识别为内部或外部命令
- python - 如何从特定时间运行 Python 脚本
- reactjs - 前端 (ReactJS) 到后端 (NodeJS) 身份验证
- forms - 使用自定义验证方法时表单中的 symfony 错误消息
- java - java.lang.ClassNotFoundException:org.hibernate.annotations.common.reflection.ReflectionManager
- mysql - MySQL:将填充了 parent_id 的行放在父 id 之后