dart 如何处理在Flutter中对象类中包含对象类的请求

p1iqtdky  于 2023-07-31  发布在  Flutter
关注(0)|答案(1)|浏览(120)

我正在尝试为下面的API response.body创建一个对象类

[
   {
      "medicationExt":null,
      "medicationSNOMED":{
         "codigo_snomed":"879978003",
         "nombre":"METOPROLOL COMPRIMIDOS 25mg",
         "descripcion":"producto que ...",
         "codigo_ingredient":"372826007",
         "descripcion_ingredient":"metoprolol (sustancia)",
         "presentacion":"comprimido",
         "volumen":25,
         "unidad":"mg"
      },
      "id_tratamiento":"tratamiento_cr2",
      "fecha_registro":"2023-03-15",
      "fecha_inicio":"2023-03-15",
      "fecha_termino":"",
      "estado":"activo",
      "frecuenciaDias":1,
      "instruccionesTexto":"Tomar 25 mg dos veces al día por vía oral. Tomar el medicamento a intervalos regulares durante el día, preferiblemente con las comidas. No dejar de tomar el medicamento de forma repentina sin consultar al médico.",
      "definedHours":true,
      "posologia":[
         {
            "hora_inicio":"08:00:00",
            "hora_fin":"09:00:00",
            "dosis":1,
            "unidad":"comprimido"
         },
         {
            "hora_inicio":"18:00:00",
            "hora_fin":"19:00:00",
            "dosis":1,
            "unidad":"comprimido"
         }
      ]
   },
   {...},
   {...},
]

字符串
这是我提出的对象类。

class Welcome {
  final dynamic medicationExt;
  final MedicationSNOMED medicationSnomed;
  final String idTratamiento;
  final DateTime fechaRegistro;
  final DateTime fechaInicio;
  final String fechaTermino;
  final String estado;
  final int frecuenciaDias;
  final String instruccionesTexto;
  final bool definedHours;
  final List<Posologia> posologia;

  const Welcome({
    this.medicationExt,
    required this.medicationSnomed,
    required this.idTratamiento,
    required this.fechaRegistro,
    required this.fechaInicio,
    required this.fechaTermino,
    required this.estado,
    required this.frecuenciaDias,
    required this.instruccionesTexto,
    required this.definedHours,
    required this.posologia,
  });

  factory Welcome.fromJson(Map<String, dynamic> json) {
    return Welcome(
      medicationExt: json['medicationExt'],
      medicationSnomed: json['medicationSNOMED'],
      idTratamiento: json['id_tratamiento'],
      fechaRegistro: json['fecha_registro'],
      fechaInicio: json['fecha_inicio'],
      fechaTermino: json['fecha_termino'],
      estado: json['estado'],
      frecuenciaDias: json['frecuenciaDias'],
      instruccionesTexto: json['instruccionesTexto'],
      definedHours: json['definedHours'],
      posologia: <Posologia>[],
    );
  }
}

class MedicationSNOMED {
  String codigoSnomed;
  String nombre;
  String descripcion;
  String codigoIngredient;
  String descripcionIngredient;
  String presentacion;
  int volumen;
  String unidad;

  MedicationSNOMED({
    required this.codigoSnomed,
    required this.nombre,
    required this.descripcion,
    required this.codigoIngredient,
    required this.descripcionIngredient,
    required this.presentacion,
    required this.volumen,
    required this.unidad,
  });

  factory MedicationSNOMED.fromJson(Map<String, dynamic> json) {
    return MedicationSNOMED(
      codigoSnomed: json['codigo_snomed'],
      nombre: json['nombre'],
      descripcion: json['descripcion'],
      codigoIngredient: json['codigo_ingredient'],
      descripcionIngredient: json['descripcion_ingredient'],
      presentacion: json['presentacion'],
      volumen: json['volumen'],
      unidad: json['unidad'],
    );
  }
}

class Posologia {
  final String horaInicio;
  final String horaFin;
  final int dosis;
  final String unidad;

  const Posologia({
    required this.horaInicio,
    required this.horaFin,
    required this.dosis,
    required this.unidad,
  });

  factory Posologia.fromJson(Map<String, dynamic> json) {
    return Posologia(
      horaInicio: json['hora_inicio'],
      horaFin: json['hora_fin'],
      dosis: json['dosis'],
      unidad: json['unidad'],
    );
  }
}


我的问题主要是“Welcome”类中的medicationSNOMED变量。我如何在不改变类上的“final”和“const”关键字的情况下填充变量?
我不想删除“final”或“const”关键字,因为性能(因为它看起来更酷更漂亮)。
我试过这样的东西

if (response.statusCode == 200) {
    List welcomesList = jsonDecode(response.body);

    List<Welcome> welcomes = [];
    for (int i = 0; i < welcomesList.length; i++) {
      Map<String, dynamic> welcomeMap = welcomesList[i];
      Map<String, dynamic> medicationSnomed = welcomeMap['medicationSNOMED'];
      welcomes[i].medicationSnomed = MedicationSNOMED.fromJson(medicationSnomed);


但是我不能访问welcomes[i]中的medicationSnomed变量,因为它是一个final变量。

kmbjn2e3

kmbjn2e31#

您可以删除const关键字、final关键字并使medicationSnomed字段可为空,如下所示

MedicationSNOMED? medicationSnomed;
  

  Welcome({
    this.medicationSnomed,
    required this.idTratamiento,
    required this.fechaRegistro,
    required this.fechaInicio,
    required this.fechaTermino,
    required this.estado,
    required this.frecuenciaDias,
    required this.instruccionesTexto,
    required this.definedHours,
    required this.posologia,
  });

字符串

相关问题