Необработанное исключение Dart: type '(dynamic) => PatientsInfo' не является подтипом типа '(String, dynamic) => MapEntry <dynamic, dynamic>' of 'transform',

Доброе утро всем, я хотел бы попросить помощи по поводу следующей ошибки, которую я получаю, я уже исследовал ее, я попытался исправить несколько методов, но безуспешно, поэтому я пришел сюда, чтобы попросить вас помогите, если можете мне помочь.

Я хочу отправить данные, чтобы использовать их в приложении

получить метод из API

      class GetPatientsInfo {
  static Future<List<PatientsInfo>> getPatients(authtoken, patientId) async {
    var patientsResponse;

    var response = await http.get(
      url + '/patients/$patientId',
      headers: {'Authorization': authtoken, 'patientId': patientId},
    );

    var mapResponse = json.decode(response.body);

    if (response.statusCode == 200) {
      var response = List<PatientsInfo>.from(mapResponse.map((i) => PatientsInfo.fromJson(i)));
      return response;      
    } else if (response.statusCode == 401) {
      // response = null;
    }
    return patientsResponse;
  }
}

метод возвращает

      {
        "addressCity": "city", 
        "addressZip": "00000", 
        "appointment_id": "328", 
        "connectedUsers": [
          {
            "info": {
              "picture": "https://weavers.space/img/default_user.jpg"
            }, 
            "user": {
              "appointment_id": "", 
              "degree": "MB.BS", 
              "id": "85", 
              "name": "Andrew Gerrard Hunger, MB.BS", 
              "phoneNumbers": [
                {
                  "number": "999-900-0909", 
                  "title": "Office"
                }, 
                {
                  "number": "999-999-9999", 
                  "title": "Cell"
                }
              ], 
              "picture": "https://weavers.space/img/default_user.jpg", 
              "role": "physician", 
              "specialty": "Dermatology", 
              "visit_date": ""
            }
          }, 
          {
            "info": {
              "picture": "https://weavers.space/img/default_user.jpg"
            }, 
            "user": {
              "appointment_id": "", 
              "degree": "MD", 
              "id": "87", 
              "name": "Jacob Martin, MD", 
              "phoneNumbers": [
                {
                  "number": "355-698-9545", 
                  "title": "Office"
                }, 
                {
                  "number": "999-999-9999", 
                  "title": "Cell"
                }
              ], 
              "picture": "https://weavers.space/img/default_user.jpg", 
              "role": "physician", 
              "specialty": "Anesthesia", 
              "visit_date": ""
            }
          }, 
          {
            "info": {
              "picture": "https://weavers.space/img/default_user.jpg"
            }, 
            "user": {
              "appointment_id": "", 
              "degree": "MD", 
              "id": "99", 
              "name": "Mary Ann, MD", 
              "phoneNumbers": [
                {
                  "number": "344-678-8991", 
                  "title": "Office"
                }, 
                {
                  "number": "219-682-6327", 
                  "title": "Cell"
                }
              ], 
              "picture": "https://weavers.space/img/default_user.jpg", 
              "role": "physician", 
              "specialty": "Dermatology", 
              "visit_date": ""
            }
          }
        ], 
        "dob": 1529366400000, 
        "first_name": "Gunther", 
        "gender": "female", 
        "homeAddr1": "Address", 
        "homeAddr2": "Address2", 
        "id": "29", 
        "last_name": "Beards", 
        "medical_data_level": [
          0, 
          0, 
          0, 
          0, 
          0, 
          0, 
          0, 
          0, 
          0, 
          0, 
          0
        ], 
        "medical_data_obj": [
          {
            "desc": "symptoms", 
            "id": 0, 
            "level": 0
          }, 
          {
            "desc": "laboratory", 
            "id": 1, 
            "level": 0
          }, 
          {
            "desc": "medicines", 
            "id": 2, 
            "level": 0
          }, 
          {
            "desc": "vitals", 
            "id": 3, 
            "level": 0
          }, 
          {
            "desc": "cardiomems", 
            "id": 4, 
            "level": 0
          }, 
          {
            "desc": "images", 
            "id": 5, 
            "level": 0
          }, 
          {
            "desc": "careguidelines", 
            "id": 6, 
            "level": 0
          }, 
          {
            "desc": "fluidmetrics", 
            "id": 7, 
            "level": 0
          }, 
          {
            "desc": "riskprofile", 
            "id": 8, 
            "level": 0
          }, 
          {
            "desc": "performanceandutilization", 
            "id": 9, 
            "level": 0
          }, 
          {
            "desc": "education", 
            "id": 10, 
            "level": 0
          }
        ], 
        "name": "Gunther Beards", 
        "notification_level": 0, 
        "phoneNumbers": [
          {
            "number": "111-111-1111", 
            "title": "Cell"
          }, 
          {
            "number": "111-111-1112", 
            "title": "Home"
          }
        ], 
        "picture": "https://weavers.space/img/default_user.jpg", 
        "remote_monitoring": "Y", 
        "role": "patient", 
        "state": "North Carolina", 
        "visit_date": "2021-01-13 09:30"
      }

Модель

      PatientsInfo patientsInfoFromJson(String str) => PatientsInfo.fromJson(json.decode(str));

String patientsInfoToJson(PatientsInfo data) => json.encode(data.toJson());


class PatientsInfo {
    PatientsInfo({
        this.addressCity,
        this.addressZip,
        this.appointmentId,
        this.connectedUsers,
        this.dob,
        this.firstName,
        this.gender,
        this.homeAddr1,
        this.homeAddr2,
        this.id,
        this.lastName,
        this.medicalDataLevel,
        this.medicalDataObj,
        this.name,
        this.notificationLevel,
        this.phoneNumbers,
        this.picture,
        this.remoteMonitoring,
        this.role,
        this.state,
        this.visitDate
    });

    String dictionary;
    String addressCity;
    String addressZip;
    String appointmentId;
    List<ConnectedUser> connectedUsers;
    int dob;
    String firstName;
    String gender;
    String homeAddr1;
    String homeAddr2;
    String id;
    String lastName;
    List<int> medicalDataLevel;
    List<MedicalDataObj> medicalDataObj;
    String name;
    int notificationLevel;
    List<PhoneNumber> phoneNumbers;
    String picture;
    String remoteMonitoring;
    String role;
    String state;
    String visitDate;

    factory PatientsInfo.fromJson(Map<String, dynamic> json) => PatientsInfo(
        addressCity: json["addressCity"],
        addressZip: json["addressZip"],
        appointmentId: json["appointment_id"],
        connectedUsers: List<ConnectedUser>.from(json["connectedUsers"].map((x) => ConnectedUser.fromJson(x))),
        dob: json["dob"],
        firstName: json["first_name"],
        gender: json["gender"],
        homeAddr1: json["homeAddr1"],
        homeAddr2: json["homeAddr2"],
        id: json["id"],
        lastName: json["last_name"],
        medicalDataLevel: List<int>.from(json["medical_data_level"].map((x) => x)),
        medicalDataObj: List<MedicalDataObj>.from(json["medical_data_obj"].map((x) => MedicalDataObj.fromJson(x))),
        name: json["name"],
        notificationLevel: json["notification_level"],
        phoneNumbers: List<PhoneNumber>.from(json["phoneNumbers"].map((x) => PhoneNumber.fromJson(x))),
        picture: json["picture"],
        remoteMonitoring: json["remote_monitoring"],
        role: json["role"],
        state: json["state"],
        visitDate: json["visit_date"]
    );

    Map<String, dynamic> toJson() => {
        "addressCity": addressCity,
        "addressZip": addressZip,
        "appointment_id": appointmentId,
        "connectedUsers": List<dynamic>.from(connectedUsers.map((x) => x.toJson())),
        "dob": dob,
        "first_name": firstName,
        "gender": gender,
        "homeAddr1": homeAddr1,
        "homeAddr2": homeAddr2,
        "id": id,
        "last_name": lastName,
        "medical_data_level": List<dynamic>.from(medicalDataLevel.map((x) => x)),
        "medical_data_obj": List<dynamic>.from(medicalDataObj.map((x) => x.toJson())),
        "name": name,
        "notification_level": notificationLevel,
        "phoneNumbers": List<dynamic>.from(phoneNumbers.map((x) => x.toJson())),
        "picture": picture,
        "remote_monitoring": remoteMonitoring,
        "role": role,
        "state": state,
        "visit_date": visitDate
    };
}

class ConnectedUser {
    ConnectedUser({
        this.info,
        this.user,
    });

    Info info;
    User user;

    factory ConnectedUser.fromJson(Map<String, dynamic> json) => ConnectedUser(
        info: Info.fromJson(json["info"]),
        user: User.fromJson(json["user"]),
    );

    Map<String, dynamic> toJson() => {
        "info": info.toJson(),
        "user": user.toJson(),
    };
}

class Info {
    Info({
        this.picture,
    });

    String picture;

    factory Info.fromJson(Map<String, dynamic> json) => Info(
        picture: json["picture"],
    );

    Map<String, dynamic> toJson() => {
        "picture": picture,
    };
}

class User {
    User({
        this.appointmentId,
        this.degree,
        this.id,
        this.name,
        this.phoneNumbers,
        this.picture,
        this.role,
        this.specialty,
        this.visitDate,
    });

    String appointmentId;
    String degree;
    String id;
    String name;
    List<PhoneNumber> phoneNumbers;
    String picture;
    String role;
    String specialty;
    String visitDate;

    factory User.fromJson(Map<String, dynamic> json) => User(
        appointmentId: json["appointment_id"],
        degree: json["degree"],
        id: json["id"],
        name: json["name"],
        phoneNumbers: List<PhoneNumber>.from(json["phoneNumbers"].map((x) => PhoneNumber.fromJson(x))),
        picture: json["picture"],
        role: json["role"],
        specialty: json["specialty"],
        visitDate: json["visit_date"],
    );

    Map<String, dynamic> toJson() => {
        "appointment_id": appointmentId,
        "degree": degree,
        "id": id,
        "name": name,
        "phoneNumbers": List<dynamic>.from(phoneNumbers.map((x) => x.toJson())),
        "picture": picture,
        "role": role,
        "specialty": specialty,
        "visit_date": visitDate,
    };
}

class PhoneNumber {
    PhoneNumber({
        this.number,
        this.title,
    });

    String number;
    String title;

    factory PhoneNumber.fromJson(Map<String, dynamic> json) => PhoneNumber(
        number: json["number"],
        title: json["title"],
    );

    Map<String, dynamic> toJson() => {
        "number": number,
        "title": title,
    };
}

class MedicalDataObj {
    MedicalDataObj({
        this.desc,
        this.id,
        this.level,
    });

    String desc;
    int id;
    int level;

    factory MedicalDataObj.fromJson(Map<String, dynamic> json) => MedicalDataObj(
        desc: json["desc"],
        id: json["id"],
        level: json["level"],
    );

    Map<String, dynamic> toJson() => {
        "desc": desc,
        "id": id,
        "level": level,
    };
}

ОШИБКА

      Dart Unhandled Exception: type '(dynamic) => PatientsInfo' is not a subtype of type '(String, dynamic) => MapEntry<dynamic, dynamic>' of 'transform', stack trace: #0      GetPatientsInfo.getPatients

2 ответа

Следующая строка в getPatients является недействительным:

      var response = List<PatientsInfo>.from(mapResponse.map((i) => PatientsInfo.fromJson(i)));

Вместо закрытия (i) => PatientsInfo.fromJson(i), Map.map ожидает чего-то вроде (key, value) => MapEntry(newKey, newValue).

Это то, о чем вам говорит ошибка типа.

Может попробовать эту модель:

      class PatientsInfo {
  String addressCity;
  String addressZip;
  String appointmentId;
  List<ConnectedUsers> connectedUsers;
  int dob;
  String firstName;
  String gender;
  String homeAddr1;
  String homeAddr2;
  String id;
  String lastName;
  List<int> medicalDataLevel;
  List<MedicalDataObj> medicalDataObj;
  String name;
  int notificationLevel;
  List<PhoneNumbers> phoneNumbers;
  String picture;
  String remoteMonitoring;
  String role;
  String state;
  String visitDate;

  PatientsInfo(
      {this.addressCity,
      this.addressZip,
      this.appointmentId,
      this.connectedUsers,
      this.dob,
      this.firstName,
      this.gender,
      this.homeAddr1,
      this.homeAddr2,
      this.id,
      this.lastName,
      this.medicalDataLevel,
      this.medicalDataObj,
      this.name,
      this.notificationLevel,
      this.phoneNumbers,
      this.picture,
      this.remoteMonitoring,
      this.role,
      this.state,
      this.visitDate});

  PatientsInfo.fromJson(Map<String, dynamic> json) {
    addressCity = json['addressCity'];
    addressZip = json['addressZip'];
    appointmentId = json['appointment_id'];
    if (json['connectedUsers'] != null) {
      connectedUsers = new List<ConnectedUsers>();
      json['connectedUsers'].forEach((v) {
        connectedUsers.add(new ConnectedUsers.fromJson(v));
      });
    }
    dob = json['dob'];
    firstName = json['first_name'];
    gender = json['gender'];
    homeAddr1 = json['homeAddr1'];
    homeAddr2 = json['homeAddr2'];
    id = json['id'];
    lastName = json['last_name'];
    medicalDataLevel = json['medical_data_level'].cast<int>();
    if (json['medical_data_obj'] != null) {
      medicalDataObj = new List<MedicalDataObj>();
      json['medical_data_obj'].forEach((v) {
        medicalDataObj.add(new MedicalDataObj.fromJson(v));
      });
    }
    name = json['name'];
    notificationLevel = json['notification_level'];
    if (json['phoneNumbers'] != null) {
      phoneNumbers = new List<PhoneNumbers>();
      json['phoneNumbers'].forEach((v) {
        phoneNumbers.add(new PhoneNumbers.fromJson(v));
      });
    }
    picture = json['picture'];
    remoteMonitoring = json['remote_monitoring'];
    role = json['role'];
    state = json['state'];
    visitDate = json['visit_date'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['addressCity'] = this.addressCity;
    data['addressZip'] = this.addressZip;
    data['appointment_id'] = this.appointmentId;
    if (this.connectedUsers != null) {
      data['connectedUsers'] =
          this.connectedUsers.map((v) => v.toJson()).toList();
    }
    data['dob'] = this.dob;
    data['first_name'] = this.firstName;
    data['gender'] = this.gender;
    data['homeAddr1'] = this.homeAddr1;
    data['homeAddr2'] = this.homeAddr2;
    data['id'] = this.id;
    data['last_name'] = this.lastName;
    data['medical_data_level'] = this.medicalDataLevel;
    if (this.medicalDataObj != null) {
      data['medical_data_obj'] =
          this.medicalDataObj.map((v) => v.toJson()).toList();
    }
    data['name'] = this.name;
    data['notification_level'] = this.notificationLevel;
    if (this.phoneNumbers != null) {
      data['phoneNumbers'] = this.phoneNumbers.map((v) => v.toJson()).toList();
    }
    data['picture'] = this.picture;
    data['remote_monitoring'] = this.remoteMonitoring;
    data['role'] = this.role;
    data['state'] = this.state;
    data['visit_date'] = this.visitDate;
    return data;
  }
}

class ConnectedUsers {
  Info info;
  User user;

  ConnectedUsers({this.info, this.user});

  ConnectedUsers.fromJson(Map<String, dynamic> json) {
    info = json['info'] != null ? new Info.fromJson(json['info']) : null;
    user = json['user'] != null ? new User.fromJson(json['user']) : null;
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.info != null) {
      data['info'] = this.info.toJson();
    }
    if (this.user != null) {
      data['user'] = this.user.toJson();
    }
    return data;
  }
}

class Info {
  String picture;

  Info({this.picture});

  Info.fromJson(Map<String, dynamic> json) {
    picture = json['picture'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['picture'] = this.picture;
    return data;
  }
}

class User {
  String appointmentId;
  String degree;
  String id;
  String name;
  List<PhoneNumbers> phoneNumbers;
  String picture;
  String role;
  String specialty;
  String visitDate;

  User(
      {this.appointmentId,
      this.degree,
      this.id,
      this.name,
      this.phoneNumbers,
      this.picture,
      this.role,
      this.specialty,
      this.visitDate});

  User.fromJson(Map<String, dynamic> json) {
    appointmentId = json['appointment_id'];
    degree = json['degree'];
    id = json['id'];
    name = json['name'];
    if (json['phoneNumbers'] != null) {
      phoneNumbers = new List<PhoneNumbers>();
      json['phoneNumbers'].forEach((v) {
        phoneNumbers.add(new PhoneNumbers.fromJson(v));
      });
    }
    picture = json['picture'];
    role = json['role'];
    specialty = json['specialty'];
    visitDate = json['visit_date'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['appointment_id'] = this.appointmentId;
    data['degree'] = this.degree;
    data['id'] = this.id;
    data['name'] = this.name;
    if (this.phoneNumbers != null) {
      data['phoneNumbers'] = this.phoneNumbers.map((v) => v.toJson()).toList();
    }
    data['picture'] = this.picture;
    data['role'] = this.role;
    data['specialty'] = this.specialty;
    data['visit_date'] = this.visitDate;
    return data;
  }
}

class PhoneNumbers {
  String number;
  String title;

  PhoneNumbers({this.number, this.title});

  PhoneNumbers.fromJson(Map<String, dynamic> json) {
    number = json['number'];
    title = json['title'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['number'] = this.number;
    data['title'] = this.title;
    return data;
  }
}

class MedicalDataObj {
  String desc;
  int id;
  int level;

  MedicalDataObj({this.desc, this.id, this.level});

  MedicalDataObj.fromJson(Map<String, dynamic> json) {
    desc = json['desc'];
    id = json['id'];
    level = json['level'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['desc'] = this.desc;
    data['id'] = this.id;
    data['level'] = this.level;
    return data;
  }
}
Другие вопросы по тегам