Flutter中如何对Hive存储的CartModel列表使用reduce计算总金额?
错误原因
reduce方法要求闭包的返回值类型必须与列表元素类型保持一致,你的列表存储的是CartModel类型对象,但你在闭包中直接返回了int类型的计算结果,不符合类型约束,因此抛出类型不匹配错误。- 原有代码的闭包逻辑存在错误:既没有使用遍历到的
element元素,也没有乘以商品数量quantity,无法正确计算总金额。
正确实现方案
推荐使用fold方法,支持指定初始值,空列表场景下也不会报错:
final cartBox = Hive.box<CartModel>('cartModel'); // 初始累加值为0,遍历每个商品累加 单价*数量 int totalAmount = cartBox.values.fold<int>(0, (currentSum, item) => currentSum + item.price * item.quantity);
如果你坚持使用reduce实现,需要先将每个商品的应付金额提取为int类型集合再累加,注意需要提前判断列表非空,否则空列表调用reduce会抛出异常:
final cartItems = Hive.box<CartModel>('cartModel').values; if (cartItems.isNotEmpty) { int totalAmount = cartItems .map((item) => item.price * item.quantity) .reduce((value, element) => value + element); }
内容的提问来源于stack exchange,提问作者Basudev Nayak
相关产品推荐
相关产品推荐

