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

Flutter如何用where从嵌套列表中获取指定id的CartModel数据

解决方案

假设你的CartMetadata类里有个存储嵌套结构的属性(比如叫cartGroups,类型是Map<String, List<CartModel>>),可以按以下步骤找到目标CartModel实例:

  1. 扁平化嵌套结构:先把Map里所有的List<CartModel>提取出来,合并成一个统一的可遍历集合。用values拿到Map的所有值(也就是各个List),再通过expand方法把这些List展开成单个元素的序列。
  2. 筛选目标实例:在扁平化后的集合里,用firstWhere(找单个匹配项)或where(找多个匹配项)根据id筛选。用firstWhere时建议设置orElse,避免找不到匹配项时抛出异常。

示例代码

// 已通过解析得到CartMetadata实例
CartMetadata cartMetadata = CartMetadata.fromJson(jsonMap);

// 要查找的目标id
int targetId = 30;

// 扁平化嵌套结构并查找目标CartModel
CartModel? targetCart = cartMetadata.cartGroups.values
    .expand((cartList) => cartList) // 展开所有List<CartModel>
    .firstWhere(
      (cart) => cart.id == targetId,
      orElse: () => null, // 无匹配时返回null
    );

// 处理结果
if (targetCart != null) {
  // 对找到的CartModel做后续处理
} else {
  // 处理未找到的情况
}

额外说明

  • 替换代码里的cartGroups为你CartMetadata类中实际存储嵌套Map的属性名(比如可能是cartCollections、itemGroups等)。
  • 如果需要获取所有匹配id的CartModel实例,把firstWhere换成where,再转成List即可:
Iterable<CartModel> matchingCarts = cartMetadata.cartGroups.values
    .expand((cartList) => cartList)
    .where((cart) => cart.id == targetId);

List<CartModel> matchingCartList = matchingCarts.toList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:20:31