Flutter Firebase 数据库错误的时间戳顺序

Posted

技术标签:

【中文标题】Flutter Firebase 数据库错误的时间戳顺序【英文标题】:Flutter Firebase Database wrong timestamp order 【发布时间】:2019-01-19 09:07:55 【问题描述】:

我正在尝试将时间戳设置到 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 错误还是颤振?

【问题讨论】:

【参考方案1】:

数据以正确的顺序检索到DataSnapshot。但是当您调用snap.value 时,快照中的信息必须转换为Map<String, Object>,它不再可以保存有关子节点顺序的信息。

为了保持顺序,您必须使用循环处理来自DataSnapshot 的子节点。我(根本)不是 Flutter 方面的专家,但我无法快速找到一种方法来为价值事件执行此操作。所以你可能想改为收听.childAdded

   FirebaseDatabase.instance
        .reference()
        .child('path')
        .orderByChild('timestamp')
        .onChildAdded
        .listen((Event event) 
      print(event.snapshot.value);
    )

【讨论】:

抱歉回复晚了。它工作得很好!如果我使用DateTime.now().millisecondsSinceEpoch,它也会起作用吗?类型是 int 但文档显示自 1970 年以来的毫秒数。所以我猜它有效,但我只是想确定一下。

以上是关于Flutter Firebase 数据库错误的时间戳顺序的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:无法从 firebase 读取数据。方法 '[]' 在 null 错误上被调用

Flutter web firebase/firestore错误运行

Flutter 和 Firebase。数据更改时重建小部件。错误的代码或错误的数据库? [关闭]

Flutter 在使用 StreamBuilder 从 firebase 加载数据之前显示红色错误屏幕,如何解决?

Firebase 核心依赖错误(Flutter/Firebase)

Flutter 错误:找不到符号导入 com.google.firebase.firestore.LoadBundleTaskProgress;