【问题标题】:Flutter + Firebase - Calculate Time LeftFlutter + Firebase - 计算剩余时间
【发布时间】:2021-05-02 18:58:01
【问题描述】:

我正在尝试计算从将帖子添加到数据库中的剩余时间。我希望多台设备看到相同的倒计时。

round {
  seconds: 5,
  time: 1619971281887 (ServerValue.timstamp)
}

并使用以下代码计算剩余时间。此代码是对How to implement a distributed countdown timer in Firebase中代码的改编

databaseReference.child(code).child("round").onValue.listen((event) {
    var seconds = event.snapshot.value['seconds'];
    var startAt = event.snapshot.value['time'];
    Timer.periodic(new Duration(seconds: 1), (timer) {
      var timeLeft = (seconds * 1000) -
          ((DateTime.now().millisecondsSinceEpoch -
              startAt -
              serverTimeOffset));
      print("Seconds");
      print(seconds * 1000);
      print("Time Now");
      print(DateTime.now().millisecondsSinceEpoch);
      print("Start At");
      print(startAt);
      print("Offset");
      print(serverTimeOffset);
      print("Time Left");
      print(timeLeft);
      if (timeLeft < 0) {
        timer.cancel();
      } else {
        var show = (timeLeft / 1000).floor();
        var per = (timeLeft % 1000);
        //print(show);
        //print(per);
      }
    });
  });

为了查看上面的代码是否正常工作,我添加了几个打印调用。问题是 startAt 出于某种原因不断更新自己。不知道为什么会这样。如果有人能提供一些启示,将不胜感激。

控制台的部分输出如下:

flutter: Start At
flutter: 1619982194189
flutter: Time Left
flutter: 10506.6201171875
flutter: Start At
flutter: 1619982193226
flutter: Time Left
flutter: 9315.6201171875

【问题讨论】:

  • 如果您的onValue 被多次调用,这意味着数据库中的值正在更新。您共享的代码不会发生任何此类更新,因此我建议您在其余代码中搜索此类写入。您还应该能够通过查看 Firebase 控制台中的节点来查看更新。最后,如果您不关心更新,您可以使用once() 而不是onValue 只从数据库中获取一次值。
  • 我找不到更新我的代码的内容。我想我会继续使用一次()。再次感谢您。

标签: firebase flutter firebase-realtime-database


【解决方案1】:

如果您的onValue 被多次调用,这意味着数据库中的值正在更新。您共享的代码不会发生任何此类更新,因此我建议您在其余代码中搜索此类写入。

您还应该能够通过查看 Firebase 控制台中的节点来查看更新。这使您可以准确地看到更新发生的时间,并且可能更容易找到源代码

最后,如果你不关心更新,你可以使用once()而不是onValue来只从数据库中获取一个值。

【讨论】:

    【解决方案2】:

    如果代码正在运行,但您不确定它为何运行,最好的找出方法是使用调试器并查看代码何时被调用。

    给定您的代码,只要有新事件发生,它就会更新并启动一个新计时器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      相关资源
      最近更新 更多