Flutter如何用where从嵌套列表中获取指定id的CartModel数据
解决方案
假设你的CartMetadata类里有个存储嵌套结构的属性(比如叫cartGroups,类型是Map<String, List<CartModel>>),可以按以下步骤找到目标CartModel实例:
- 扁平化嵌套结构:先把Map里所有的
List<CartModel>提取出来,合并成一个统一的可遍历集合。用values拿到Map的所有值(也就是各个List),再通过expand方法把这些List展开成单个元素的序列。 - 筛选目标实例:在扁平化后的集合里,用
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
相关产品推荐
相关产品推荐

