【问题标题】:Flutter Firestore Server side TimestampFlutter Firestore 服务器端时间戳
【发布时间】:2018-11-27 03:54:38
【问题描述】:

我需要在使用 Flutter 应用添加到 Firestore 的新文档上添加服务器端时间戳。我知道我应该使用FieldValue.serverTimestamp,但我不确定在哪里可以找到它。

【问题讨论】:

标签: dart google-cloud-firestore flutter


【解决方案1】:

截至 9 月 5 日,更新后的 cloud_firestore v0.8.0 库现在具有 FieldValue.serverTimestamp()。宇宙现在一切都很好

【讨论】:

  • 看起来这是正确的答案,但请添加更多代码以显示存储变量的数据类型应该是什么,以及如何按此值排序?
  • @ShajeelAfzal 所有这些问题都不在 OP 的帖子中。如果您想回答这些问题,您可以随时创建一个新的。
  • 我不知道为什么,但是我遇到了 serverTimestamp() 的问题,似乎需要一些时间来为服务器写入时间,而且我的第一个快照具有空值!在这里我发布了我自己的问题stackoverflow.com/questions/64287252/…
【解决方案2】:

'timestamp' : Timestamp.now()

Timestamp.now() 是 cloud_firestore 的一部分;


示例 截图显示库从 cloud_firestore 导入,并创建 a server-generated timestamp in the written data. Docs

【讨论】:

  • 在 2019 年像魅力一样工作
  • 我相信 Timestamp.now() 返回客户端机器时间的时间戳,而不是服务器端时间戳。
  • 这取代了已被贬低的 FieldValue.serverTimestamp()
  • 文档现在指向FieldValue.serverTimestamp() 这个Timestamp.now() 以微秒为单位返回客户端日期时间
【解决方案3】:

通过添加示例使用来扩展 @spongyboss 的答案(自 2020 年 4 月起生效):

_firestore.collection('messages').add({
                      'text': messageText,
                      'sender': loggedInUser.email,
                      'created': FieldValue.serverTimestamp()
                  });

'created' 将存储为 timestamp

样本排序:

_firestore.collection('messages')
          .orderBy('created', descending: false)
          .snapshots()

【讨论】:

  • 如果你想在离线模式下访问它,这个值是不可用的,afaik。
  • orderBy 在您按照 vscode 控制台中显示的索引路径创建索引之前将不起作用。我已经运行了 firebase 给出的索引 url,orderby 为我工作。谢谢。
猜你喜欢
  • 2021-04-19
  • 1970-01-01
  • 2020-10-24
  • 2021-05-30
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多