【问题标题】:How to perform Firebase Mutable Transaction Data with Flutter?如何使用 Flutter 执行 Firebase 可变事务数据?
【发布时间】:2018-05-04 07:57:42
【问题描述】:

我有 Swift 代码,我在某些条件下减少或增加 int 值。如何用 Flutter 复制它?这是我的 Swift 代码..

//  2.  Decrease Value -= from NumberOnes
let decreaseRef = self.ref.child("NumberOnes/\(myfav1)/Value")
decreaseRef.runTransactionBlock { (currentData: FIRMutableData) -> FIRTransactionResult in
    if var data = currentData.value as? Int
    {
        var count = data
        count -= 1
        data = count
        currentData.value = data
        return FIRTransactionResult.success(withValue: currentData)
    }
    return FIRTransactionResult.success(withValue: currentData)
}

另外,如果有这方面的文档/教程,请指点我。

* 更新 *

这是我的 Flutter 代码...

fb.child('UserVideo/${userid}/Vid1').onValue.listen((Event event){
        if (event.snapshot != null){
          final vidID = event.snapshot.value["videoID"];
          fb.child('NumberOnes/${vidID}/Value').onValue.listen((Event newEvent){
            int vidValue = newEvent.snapshot.value;
            vidValue;
            print(vidValue);
            //vidValue = value;
            final value = vidValue--;

            fb.child('NumberOnes/${vidID}').update({
              'Value': value,
            });

          });

我的 Flutter 代码的问题在于它不会停止减少。有没有办法解决这个问题?

【问题讨论】:

  • 我对 Swift 不熟悉,不管你能否澄清问题,你是否试图根据代码中的某些条件来增加/减少数据库中的 int 值?
  • 是的。 reduceRef 的值是一个 int 并且我试图向上或向下操纵它。并保存
  • @aziza 我正在编写一些接近但并没有停止减少的 Flutter 代码。请看一看。
  • 什么时候需要减少,什么时候不需要?
  • @aziza 在上面的例子中,我只是在减少。我将增加我的代码的另一部分。我假设它会以类似的方式工作。

标签: firebase firebase-realtime-database transactions flutter nsmutabledata


【解决方案1】:

这是我的解决方案。我从这里的答案中解决了...Flutter Firebase update will not stop updating node?

基本上,我将值隔离一次,对其进行操作,然后使用新信息更新节点。我认为这比 Firebase Swift SDK 中的 runTransactionBlock 效率低得多,后者将快照值作为 MutableData 带回。如果将来有人找到解决此问题的方法,请添加答案。

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
      });
    }
  }
}

【讨论】:

  • DatabaseReference 现在提供runTransaction()
  • @GünterZöchbauer 你能提供一个可行的例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 2019-05-31
  • 2020-10-10
  • 2019-07-01
  • 2019-12-23
  • 2017-01-10
  • 1970-01-01
相关资源
最近更新 更多