Необработанное исключение Dart: тип '(dynamic) = ›PatientsInfo' не является подтипом типа '(String, dynamic) =› MapEntry ‹динамический, динамический›' из '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

person Eduardo Schultz Ribeiro    schedule 13.04.2021    source источник
comment
У меня нет точного решения, но есть идеи. В вашем методе fromJson я бы написал это как PatientsInfo.fromJson (Map ‹String, dynamic› json) {...} и с переменными вместо addressCity: json [addressCity], addressCity = json [addressCity]. Попробуйте этот стиль . Также есть веб-сайт, конвертирующий ваши данные json в полный класс модели javiercbk.github.io/json_to_dart, который вы можете проверить это.   -  person aoiTenshi    schedule 13.04.2021
comment
@aoiTenshi Я тестировал его, используя шаблон, предоставленный сайтом, но у меня такая же ошибка, может быть, это что-то при отправке данных в json, нет?   -  person Eduardo Schultz Ribeiro    schedule 13.04.2021


Ответы (1)


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

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

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

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

person hacker1024    schedule 14.04.2021
comment
Доброе утро, спасибо за ответ, не могли бы вы привести мне пример, чтобы немного лучше понять? - person Eduardo Schultz Ribeiro; 14.04.2021