Необработанное исключение 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;
}
}