You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何FutureProvider获取的Product对象中相同维度值仅打印一次?

问题原因

你打印时用了Dart的集合字面量{},这种写法默认创建的是Set(集合)类型,而Set的核心特性是不允许存在重复元素。当P2的dim_x和dim_y都是80.0时,Set会自动去重,所以只保留了一个80.0,导致输出变成{80.0}而不是预期的两个值。

解决方案

方案1:改用列表[]存储值

把打印语句里的{}换成[],列表允许重复元素,能完整保留两个维度值:

print('\n${productList.map((e) => [e.dim_x, e.dim_y])}\n');

输出会变成:([200.0, 100.0], [80.0, 80.0])

方案2:用Map明确键值对(更易读)

如果想清晰看到每个值对应的字段名,改用Map:

print('\n${productList.map((e) => {'dim_x': e.dim_x, 'dim_y': e.dim_y})}\n');

输出会变成:({dim_x: 200.0, dim_y: 100.0}, {dim_x: 80.0, dim_y: 80.0})

额外优化点

你的ScheduledDelivery组件在initState里调用context.read<List<Product>>()存在风险:initState执行时,Widget还未完全关联到Provider的上下文,可能获取到的是初始空列表,且后续Provider数据更新时,productList不会自动刷新。建议改成在build方法里用context.watch:

@override
Widget build(BuildContext context) {
  final productList = context.watch<List<Product>>();
  print('\n${productList.map((e) => [e.dim_x, e.dim_y])}\n');
  // ...其他代码
}

这样当Firestore的数据更新时,组件会自动重建并获取最新的产品列表。

内容的提问来源于stack exchange,提问作者pbs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:56:10