Firebase 省道内错误:键入';列表<;动态>';不是类型为';地图<;字符串,动态>';与火堆搏斗
我在将firestore文档字段解析为对象列表时遇到问题。这是我的Json结构示例Firebase 省道内错误:键入';列表<;动态>';不是类型为';地图<;字符串,动态>';与火堆搏斗,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我在将firestore文档字段解析为对象列表时遇到问题。这是我的Json结构示例 [ { “名称”:“Nahit Fidancı”, “电子邮件”:relativeaccount@gmail.com", “用户类型”:“相对” }, { “姓名”:“HüseyinÖzkoç”, “电子邮件”:baba@gmail.com", “用户类型”:“相对” } ] 以及试图从Json获取对象列表的代码 factory Patient.patientFromDocumentSnapshot(Docum
[
{
“名称”:“Nahit Fidancı”,
“电子邮件”:relativeaccount@gmail.com",
“用户类型”:“相对”
},
{
“姓名”:“HüseyinÖzkoç”,
“电子邮件”:baba@gmail.com",
“用户类型”:“相对”
}
]
以及试图从Json获取对象列表的代码
factory Patient.patientFromDocumentSnapshot(DocumentSnapshot快照){
final jsonResponse=jsonDecode(snapshot.data[“relations”].toString());
RelativeList RelativeList=RelativeList.fromJson(jsonResponse);
返回病人(
亲戚,亲戚,
todoList:List.from(snapshot.data[“todoList”]),
位置:快照。数据[“位置”],
用户类型:快照。数据[“用户类型”]=“患者”
?UserType.patient
:UserType.relative,
uid:snapshot.data[“uid”],
名称:snapshot.data[“name”],
电子邮件:快照.数据[“电子邮件”],
fileImage:snapshot.data[“fileImage”],
性别:快照。数据[“性别”]=“男性”?性别。男性:性别。女性,
生日:DateTime.parse(snapshot.data[“生日”]),
registrationDate:DateTime.parse(snapshot.data[“registrationDate”]),
通知:snapshot.data[“通知”],
);
}
在上面的代码中,从Firestore获取亲戚没有问题。我将解码后的Json存储在jsonresponse
中,作为List
的类型。
从调用RelativeList.fromJson(jsonResponse)
开始出现问题
类相对论列表{
最后的亲属名单;
相对主义者(指亲属);
factory RelativeList.fromJson(列表parsedJson){
列出亲属=
parsedJson.map((i)=>Relative.fromJson(i)).toList();
印刷品(亲属);
返回相对论者(亲属);
}
}
上面的代码,当List relatives=parsedJson.map((i)=>Relative.fromJson(i)).toList()时代码>已执行,它抛出名为的错误类型“List”不是类型“Map”的子类型
。
这就是我的Relative.fromJson()
的样子
factory-Relative.fromJson(Map-parsedJson){
返回亲戚(
患者:列表。来自(parsedJson[“患者”]),
faceModel:parsedJson[“faceModel”],
userType:parsedJson[“userType”]=“患者”
?UserType.patient
:UserType.relative,
uid:parsedJson[“uid”]??“,
名称:parsedJson[“名称”],
电子邮件:parsedJson[“电子邮件”],
fileImage:parsedJson[“fileImage”]??“,
性别:(parsedJson[“性别”]??“男性”)==“男性”
?性别:男性
:性别,
生日:DateTime.parse(parsedJson[“生日”])??
DateTime.now().toIso8601String(),
registrationDate:DateTime.parse(parsedJson[“registrationDate”])??
DateTime.now().toIso8601String(),
通知:parsedJson[“通知”]??“,
);
}
}
有人能帮我一下吗?您没有正确使用空感知。当您将值传递给任何其他构造函数时,必须检查该值是否为null
使用以下相对类
class Relative {
var patients;
var faceModel;
var userType;
var uid;
var name;
var email;
var fileImage;
var notification;
var registrationDate;
var birthday;
var gender;
Relative(
{this.name,
this.birthday,
this.email,
this.faceModel,
this.fileImage,
this.gender,
this.notification,
this.patients,
this.registrationDate,
this.uid,
this.userType});
factory Relative.fromJson(Map<String, dynamic> parsedJson) {
return Relative(
patients: parsedJson["patients"] != null
? List<String>.from(parsedJson["patients"])
: [],
faceModel: parsedJson["faceModel"] ?? '',
userType: parsedJson["userType"] == 'Patient'
? "UserType.patient"
: "UserType.relative",
uid: parsedJson["uid"] ?? "",
name: parsedJson["name"] ?? '',
email: parsedJson["email"] ?? '',
fileImage: parsedJson["fileImage"] ?? "",
gender: (parsedJson["gender"] ?? 'Male') == 'Male'
? "Gender.male"
: "Gender.female",
birthday: DateTime.parse(
parsedJson["birthday"] ?? DateTime.now().toIso8601String()),
registrationDate: DateTime.parse(
parsedJson["registrationDate"] ?? DateTime.now().toIso8601String()),
notification: parsedJson["notification"] ?? "",
);
}
}
类相对{
var患者;
var模型;
var用户类型;
变量uid;
变量名;
var电子邮件;
var文件图像;
风险值通知;
风险值登记日期;
生日;
变量性别;
相对的(
{this.name,
这个生日,
这是一封电子邮件,
这个模型,
这个.fileImage,
这个,性别,
本通知,
这个,病人,
这是注册日期,
这个.uid,
这个参数为.userType});
factory Relative.fromJson(映射parsedJson){
返回亲戚(
患者:parsedJson[“患者”]!=null
?列表。从(parsedJson[“患者”])
: [],
faceModel:parsedJson[“faceModel”]??“,
userType:parsedJson[“userType”]=“患者”
?“用户类型。患者”
:“UserType.relative”,
uid:parsedJson[“uid”]??“,
名称:parsedJson[“名称”]??“”,
电子邮件:parsedJson[“电子邮件”]??“,
fileImage:parsedJson[“fileImage”]??“,
性别:(parsedJson[“性别”]??“男性”)==“男性”
?“性别,男性”
:“性别,女性”,
生日:DateTime.parse(
parsedJson[“生日”]??DateTime.now().toIso8601String()),
注册日期:DateTime.parse(
parsedJson[“registrationDate”]??DateTime.now().toIso8601String()),
通知:parsedJson[“通知”]??“,
);
}
}
是的,你说得对。在我尝试了几次之后,我像你一样解决了它。谢谢你的回答。