尝试在 Future<List> 上使用数组方法“折叠”来获取项目的总价格
Posted
技术标签:
【中文标题】尝试在 Future<List> 上使用数组方法“折叠”来获取项目的总价格【英文标题】:Trying to use array method "fold" on a Future<List> to get total price of items 【发布时间】:2020-03-22 17:59:27 【问题描述】:在 Dart/Flutter 中,我正在构建一个模型,在该模型中,我使用 Future 和异步等待来获取所有产品的远程端点。
当我检索到列表后,我想指定一个属性,该属性使用 Dart 列表的“折叠”方法返回所有项目的总数。
类似这样的:
Future<List<Product>> get items async => // here i get products
await Future.wait(_itemIds.map((id) => api.getProduct(id)));
Future<int> get totalPrice async => // here i calculate products total amount
await items.then((iii) => iii.fold(0, (total, current) async
return total + current.price;
)
);
但我得到一个错误:
没有为“FutureOr”类定义运算符“+”。尝试 定义运算符 '+'.dart(undefined_operator)。
我应该如何用异步语言解决这个问题?
谢谢
【问题讨论】:
Dart 编译器仍然返回相同的错误:没有为类“Product”定义运算符“+”。尝试定义运算符 '+'.dart(undefined_operator) 【参考方案1】:您的代码的问题是 await
不适用于 items
但适用于所有表达式 items.then(...
。
以下代码应该可以工作:
Future<List<Product>> get items async => // here i get products
await Future.wait(_itemIds.map((id) => api.getProduct(id)));
Future<int> get totalPrice async // here i calculate products total amount
final products = await items;
return products.fold<int>(0, (total, current) => total + current.price);
;
【讨论】:
你也可以return (await items).fold(0, (total, current) => total + current.price);
。我通常这样做是为了避免创建另一个变量。
谢谢,但两者仍然返回相同的编译器错误:未为类“FutureOr以上是关于尝试在 Future<List> 上使用数组方法“折叠”来获取项目的总价格的主要内容,如果未能解决你的问题,请参考以下文章
错误:类型“Future<dynamic>”不是“List<dynamic>”类型的子类型。扑
没有为类型“Future<List<Item>>”定义吸气剂“长度”
Flutter 类型“Future<List<dynamic>>”不是类型转换中“List<dynamic>”类型的子类型