Flutter 自定义函数适用于 Flutterflow 的测试模式 - 但不适用于移动应用程序构建

问题描述 投票:0回答:2

我在 Flutterflow(一个在 iOS 和 Android 上使用 Flutter 构建应用程序的平台)上运行的 Dart 中有这个自定义函数


import '/backend/backend.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/actions/index.dart'; 
import '/flutter_flow/custom_functions.dart'; 
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

Future<void> updateBalanceAndPointPremium(String documentId) async {
  try {
    final DocumentReference userDocRef =
        FirebaseFirestore.instance.collection('users').doc(documentId);

    final DocumentSnapshot snapshot = await userDocRef.get();
    if (snapshot.exists) {
      final data = snapshot.data() as Map<String, dynamic>;
      final double point = data['Point'] ?? 0.0;
      final double balance = data['Balance'] ?? 0.0;
      final int balanceTimes = data['balanceConvertTimes'] ?? 0;

      double updatedBalance = balance;
      int updatedBalanceTimes = balanceTimes;

      // Calculate the number of times the balance should be increased by 15
      int increaseCount = ((point ~/ 50) - balanceTimes);

      if (increaseCount > 0) {
        updatedBalance += increaseCount * 15;
        updatedBalanceTimes += increaseCount;
      }

      final updateData = {
        'Balance': updatedBalance,
        'balanceConvertTimes': updatedBalanceTimes
      };

      await userDocRef.update(updateData);
      print('Balance field updated successfully!');
    }
  } catch (e) {
    print('Error updating balance field: $e');
  }
}

目的是当 Firebase 上输入 documentID 的用户的 Point 数据达到阈值 50、100、150...时,将其 Balance 数据添加 15。 该代码在测试模式下运行良好(我正在使用 Flutterflow - 一个使用 Dart 构建应用程序的应用程序),但是当我通过 Codemagic 将应用程序提交到 App Store 和 Google Play 商店时,它不起作用(余额数据自动添加 15 作为预期)在 Testflight 上运行的构建和批准的 App store 应用程序上。 所以我真的不知道为什么会发生这种情况。 请帮忙。非常感谢。

我尝试将此函数放入另一个函数中,该函数在测试模式和实际构建中都运行良好。 新版本中的组合功能仍然无法工作(即使它在测试模式下仍然有效)。 新代码如下:

import '/backend/backend.dart';
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/actions/index.dart'; // Imports other custom actions
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

Future<void> addPointandBalancePremium(
    String documentId, double amountToAdd) async {
  try {
    final DocumentReference userDocRef =
        FirebaseFirestore.instance.collection('users').doc(documentId);

    await FirebaseFirestore.instance.runTransaction((transaction) async {
      final DocumentSnapshot snapshot = await transaction.get(userDocRef);
      if (snapshot.exists) {
        final data = snapshot.data() as Map<String, dynamic>;
        final currentAmount = data['Point'] ?? 0.0;

        final double balance = data['Balance'] ?? 0.0;
        final int balanceTimes = data['balanceConvertTimes'] ?? 0;

        double updatedBalance = balance;
        int updatedBalanceTimes = balanceTimes;

        var currentDist = data['pointToNextReward'] ?? 0.0;
        var currentDistFree = data['pointToNextRewardFree'] ?? 0.0;
        final newAmount = currentAmount + (0.2 * amountToAdd / 100);
        var newDist = 50 - (0.2 * amountToAdd / 100 - currentDist);
        var newDistFree = 100 - (0.2 * amountToAdd / 100 - currentDistFree);

        int increaseCount = ((newAmount ~/ 50) - balanceTimes);

        if (increaseCount > 0) {
          updatedBalance += increaseCount * 15;
          updatedBalanceTimes += increaseCount;
        }

        currentDist = newDist;
        if (newDist >= 50) {
          currentDist = newDist - 50;
        }
        ;

        currentDistFree = newDistFree;
        if (newDistFree >= 100) {
          currentDistFree = newDistFree - 100;
        }
        ;

        transaction.update(userDocRef, {
          'Point': newAmount,
          'pointToNextReward': currentDist,
          'pointToNextRewardFree': currentDistFree,
          'Balance': updatedBalance,
          'balanceConvertTimes': updatedBalanceTimes
        });
      }
    });

    print('Point and Balance fields updated successfully!');
  } catch (e) {
    print('Error updating Point field: $e');
  }
}

Flutterflow 上的测试模式一切正常,但在实际构建中却不行。 这让我真的很困惑和困惑。

android ios flutter dart flutterflow
2个回答
0
投票

在 Flutterflow 中发布到网络,然后检查控制台。


0
投票

当我在自定义函数中使用自定义函数时,我遇到了同样的问题。在测试模式下一切正常,但在真实设备上用户界面没有更新。 我解决问题的方法 1.我创建了一个页面/组件状态并存储了自定义函数内部使用的自定义函数的返回值。 2.在自定义函数中,我使用了步骤 1 中使用的值页面/组件状态。

希望它有帮助,并让我知道你是如何解决问题的

© www.soinside.com 2019 - 2024. All rights reserved.