【问题标题】:Flutter FireStore, Update TimeStamp with current time plus 5 minutesFlutter FireStore,用当前时间加 5 分钟更新时间戳
【发布时间】:2022-01-16 02:04:22
【问题描述】:

我正在将数据写入 Firestore DB,我成功写入,然后根据时间戳顺序读取它。

现在我想用当前时间加上 5 分钟来更新某些 listId 的时间戳,但无法弄清楚,正在在线检查,但我能找到的示例仅适用于 dart 以外的其他语言,并且无法想不通。

写入数据

Future<void> addSentences(String listId) {
  final Sentences = FirebaseFirestore.instance.collection('Sentences');
  return Sentences.add({
    'listId': listId,
    'timeStamp': Timestamp.now(),
  });
}

获取最旧的listId

 void getOldestListId() async {
      await for (var messages
          in FirebaseFirestore.instance.collection("Sentences").orderBy("timeStamp").limit(1).snapshots()) {
        for (var message in messages.docs.toList()) {
          print(message.data());
          Map we = message.data();
          print(we['listId']);
        }
      }
    }

试图用 TimeStamp.now() 加上 5 分钟来更新 timeStamp,但不知道该怎么做

void update() async {
    var collection = FirebaseFirestore.instance.collection('sentences');
    collection
        .doc(listId) // <-- Doc ID where data should be updated.
        .update(timeStamp: Timestamp.now() + minutes(5));
  }

编辑

请注意,listId 是我保存到 Firestore 数据库而不是文档 ID 的值,因此当我将 listId 替换为我在 Firestore DB .doc('idCopiedFromFireBaseConsole'), 中看到的文档 ID 时,它无法插入到 .doc(listId) 中我可以用当前时间时间戳更新时间戳,但我仍然不知道如何获取文档 ID,我想我应该在 getOldestListId() 函数中获取文档 ID,我怎样才能在那里获得正确的 ID?

 void getOldestListId() async {
      await for (var messages
          in FirebaseFirestore.instance.collection("Sentences").orderBy("timeStamp").limit(1).snapshots()) {
        for (var message in messages.docs.toList()) {
          print(message.data());
          Map we = message.data();
          print(we['listId']);
        }
      }
    }

这就是我可以用当前时间 + 5 分钟更新 timeStamp 的方法

void update() async {
    var collection = FirebaseFirestore.instance.collection('sentences');    collection.doc('idCopiedFromFireBaseConsole').update({'timeStamp': DateTime.now().add(const Duration(minutes: 5))});

编辑 现在它可以像我预期的那样工作,为其他有类似问题的人发布代码

向 FireStore 添加数据的功能

  Future<void> addSentences(String sentenceId) {
      final sentences = FirebaseFirestore.instance.collection('sentences');
      return sentences.add({
        'sentenceId': sentenceId,
        'timeStamp': Timestamp.now(),
      });
    }
    

addSentences() 用于向 Firestore DB 添加数据的循环

   for (int i = 0; i <= 3; i++) {
          //_sentenceList.length
          addChineseSentences(i.toString());
        }

获取最旧的sentenceId的函数

 late String _docId;
    void getOldestSentence() async {
      await for (var messages
          in FirebaseFirestore.instance.collection("sentences").orderBy("timeStamp").limit(1).snapshots()) {
        for (var message in messages.docs.toList()) {
          _docId = message.id;
          print(_docId);
          Map we = message.data();
          print(we['listId']);
        }
      }
    }
    

更新句子时间戳的功能

void updateSentence() async {
  var collection = FirebaseFirestore.instance.collection('sentences');
  collection.doc(_docId) // <-- Doc ID where data should be updated.
      .update({'timeStamp': Timestamp.fromDate(DateTime.now().add(const Duration(minutes: 5)))});
}

【问题讨论】:

    标签: flutter google-cloud-firestore timestamp


    【解决方案1】:

    应该是这样的:

    collection
        .doc(listId)
        .update(timeStamp: Timestamp(Timestamp.now(). millisecondsSinceEpoch + 5*60*1000);
    

    Timestamp.now(). millisecondsSinceEpoch 以毫秒为单位为您提供当前时间,然后我们以毫秒为单位添加 5 分钟,并将组合值转换回 Timestamp

    【讨论】:

    • 错误:需要 2 个位置参数,但找到了 1 个。 (not_enough_positional_arguments at... 而且 listId 不是文档的 ID,而是我保存在 Firestore 中的 ID,我怎样才能获得文档 ID?
    • 谢谢,我想通了只是有一些小问题,一切正常后会发布代码
    【解决方案2】:

    你可以试试:

    collection
        .doc(listId) // <-- Doc ID where data should be updated.
        .update(timeStamp: Timestamp.fromDate(DateTime.now().add(const Duration(minutes: 5))));
    

    【讨论】:

    • collection.doc('idCopiedFromFireBaseConsole').update({'timeStamp': DateTime.now().add(const Duration(minutes: 5))});这就是我可以用当前时间加上 5 分钟来更新 timeStamp 的方法。仍然不知道如何获取文档 ID
    • 我在编辑下添加了我的问题,我在其中进一步解释了我的问题,如果您可以查看它,它将帮助您更好地理解我的问题
    • 谢谢,我想通了只是有一些小问题,一切正常后会发布代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2017-08-13
    • 2017-08-28
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    相关资源
    最近更新 更多