Flutter Firebase更新不会停止更新节点? [英] Flutter Firebase update will not stop updating node?

查看:329
本文介绍了Flutter Firebase更新不会停止更新节点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在我的firebase节点中搜索一个int值并减少它。它成功减少并将正确的信息打印到我的日志一次。当我尝试使用new int更新节点时,它会重复,就好像它在循环中的位置一样。我怎样才能让它更新一次?这是我的代码......

I'm searching for an int value in my firebase node and decreasing it. It successfully decreases and prints the correct info to my log once. When I attempt to update the node with the new int it repeats as if it where in a loop. How can I get it to update a single time? Here is my code...

if (vidRank == 1) {
      await fb.child('UserVideo/${userid}/Vid1').onValue.listen((Event event){
        if (event.snapshot != null){
          var vid1id = event.snapshot.value['videoID'].toString();
          fb.child('NumberOnes/${vid1id}').onValue.listen((Event onesEvent){
            if (onesEvent.snapshot != null){
              var onesValue = (onesEvent.snapshot.value['Value'] as int);
              final vidValue = onesValue - 1;
              print("Inside  ${vidValue}");
              fb.child('NumberOnes/${vid1id}').update({
                'Value': vidValue
              });
            }
          });
        }
      });


推荐答案

如果您只需要一个操作,请使用 .once()

If you only want a single action, use .once()

if (vidRank == 1) {
  var event = await fb.child('UserVideo/${userid}/Vid1').once();
  if (event.snapshot != null){
    var vid1id = event.snapshot.value['videoID'].toString();
    var onesEvent = await fb.child('NumberOnes/${vid1id}').once();
    if (onesEvent.snapshot != null){
      var onesValue = (onesEvent.snapshot.value['Value'] as int);
      final vidValue = onesValue - 1;
      print("Inside  ${vidValue}");
      fb.child('NumberOnes/${vid1id}').update({
        'Value': vidValue
      });
    }
  }
}

否则更新将导致另一个 listen(...)的事件,你有一个完美的循环。

otherwise an update will cause another event for listen(...) and you have a perfect loop.

这篇关于Flutter Firebase更新不会停止更新节点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆