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

Dart中如何访问嵌套对象列表里CareRequirement对应care_level的price值

解决方案

你可以通过Dart的集合查找方法嵌套筛选对应数据,以下是不同场景的实现方式:

基础实现(假设对应数据一定存在,无需异常处理)

你的careLevelsList当前存储的是Map类型数据,可直接通过键取值:

// 第一步:筛选id为1的CareRequirement对象
final targetReq = careRequirementsList.firstWhere((req) => req.id == 1);
// 第二步:筛选care_level_id为1的项,取出price
final targetPrice = (targetReq.careLevelsList.firstWhere((level) => level['care_level_id'] == 1))['price'];

执行后targetPrice的值就是你需要的2000.00。

安全优化版本(兼容数据缺失场景,避免运行崩溃)

如果存在找不到对应id的可能,可通过orElse参数处理异常场景:

double? targetPrice;
// 查找目标护理要求
final targetReq = careRequirementsList.firstWhere(
  (req) => req.id == 1,
  orElse: () => CareRequirement.pure(),
);
// 匹配到对应护理要求后再查找护理等级
if (targetReq.id != 0) {
  final targetLevel = targetReq.careLevelsList.firstWhere(
    (level) => level['care_level_id'] == 1,
    orElse: () => {},
  );
  if (targetLevel.isNotEmpty) {
    targetPrice = targetLevel['price'] as double;
  }
}

最终如果targetPrice为null说明没有匹配到对应数据,不为空则是你需要的价格值。

可选优化:规范嵌套对象模型

当前careLevelsList是无类型List,容易出现类型错误,建议补充CareLevel模型做嵌套解析:

class CareLevel extends Equatable {
  final int careLevelId;
  final String careLevelName;
  final double price;

  const CareLevel({
    required this.careLevelId,
    required this.careLevelName,
    required this.price,
  });

  @override
  List<Object?> get props => [careLevelId, careLevelName, price];

  factory CareLevel.fromJson(Map<String, dynamic> json) {
    return CareLevel(
      careLevelId: json['care_level_id'],
      careLevelName: json['care_level_name'],
      price: json['price'] as double,
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'care_level_id': careLevelId,
      'care_level_name': careLevelName,
      'price': price,
    };
  }
}

修改CareRequirement中careLevelsList的类型定义和解析逻辑:

// 修改字段类型
List<CareLevel> careLevelsList = [];

// 修改fromJson方法
CareRequirement.fromJson(Map<String, dynamic> json) {
  id = json['id'];
  name = json['name'];
  careLevelsList = (json['care_levels'] as List).map((e) => CareLevel.fromJson(e)).toList();
}

优化后可以直接通过对象属性取值,代码更易维护:

final targetReq = careRequirementsList.firstWhere((req) => req.id == 1);
final targetPrice = targetReq.careLevelsList.firstWhere((level) => level.careLevelId == 1).price;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:15:08