购物车总价未更新

时间:2021-07-07 17:45:19

标签: firebase flutter dart

你好!我正在尝试更新我的电子商务应用程序的购物车总价。我试图添加功能,但它没有添加和更新价格。很高兴检查我的代码并提供帮助,谢谢。 enter image description here

import 'package:cloud_firestore/cloud_firestore.dart';

import 'cart_modal.dart';

class UserModel {
  static const ID = "uid";
  static const NAME = "name";
  static const EMAIL = "email";
  static const STRIPE_ID = "stripeId";
  static const CART = "cart";

  String _name;
  String _email;
  String _id;
  String _stripeId;
  String _priceSum = '0';

//  getters
  String get name => _name;

  String get email => _email;

  String get id => _id;

  String get stripeId => _stripeId;

  // public variables
  List<CartItemModel> cart;
  String totalCartPrice;

  UserModel.fromDocument(DocumentSnapshot doc) {
    _name = doc.data()[NAME];
    _email = doc.data()[EMAIL];
    _id = doc.data()[ID];
    cart = _convertCartItems(doc.data()[CART] ?? []);
    totalCartPrice = getTotalPrice(cart: doc.data()[CART]);

    _stripeId = doc.data()[STRIPE_ID] ?? '';
  }

  List<CartItemModel> _convertCartItems(List cart) {
    List<CartItemModel> convertedCart = [];
    for (Map cartItem in cart) {
      convertedCart.add(CartItemModel.fromMap(cartItem));
    }
    return convertedCart;
  }

  String getTotalPrice({List cart}) {
    if (cart == null) {
      return '0';
    }
    for (Map cartItem in cart) {
      _priceSum += cartItem["price"];
    }

    String total = _priceSum;
    return total;
  }
}

1 个答案:

答案 0 :(得分:0)

它不会更新,因为您已将总计数据类型创建为 String。 并且不能添加两个 string 变量,因为它们被视为文本而不是数字。您需要将它们转换为 integer value 才能进行添加。

您只需将变量 _priceSum 声明为 int _priceSum。 并且如果您的 cartItem["price"] 是一个字符串值,那么您需要在计算时对其进行转换。你可以通过解析来做到这一点,如下所示 int.parse(cartItem["price"])

所以你的 for 循环看起来像

 for (Map cartItem in cart) {
      _priceSum += int.parse(cartItem["price"])
    }

而且您还必须再次将最终结果转换为字符串,以免出现任何错误。

String total = _priceSum.toString();