flutter - 键入'_InternalLinkedHashMap' 不是“AssesmentModel”类型的子类型?
问题描述
为什么调用 getAssesment() 方法时会出现以下异常?
我正在尝试设置 _assesment = data
type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'AssesmentModel?'
这些是我的代码、模型(AssesmentModel & AreaModel)和提供者(AssesmentProvider)。
评估模型.dart
class AssesmentModel {
late int id;
late String observerName;
late String unit;
late AreaModel area;
AssesmentModel(
this.id,
this.observerName,
this.unit,
this.area,
);
AssesmentModel.fromJson(Map<String, dynamic> json) {
id = int.parse(json['id'].toString());
observerName = json['observerName'];
unit = json['unit'];
area = AreaModel.fromJson(json['area']);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'observerName': observerName,
'unit': unit,
'area': area.toJson(),
};
}
}
评估提供者.dart
class AssesmentFormProvider with ChangeNotifier {
AssesmentModel? _assesment;
AssesmentModel? get assesment => _assesment;
set assesment(AssesmentModel? assesment) {
_assesment = assesment;
notifyListeners();
}
Future<void> getAssesment() async {
try {
// AssesmentModel assesment = await AssesmentService().readJson();
var response = await rootBundle.loadString('assets/json/assesment.json');
print('the response: ' + response);
var data = json.decode(response);
print('assesment in provider');
print(data);
_assesment = data;
} catch (e) {
print(e);
}
}
}
这是我与 AssesmentModel 相关的 AreaModel
class AreaModel {
late int id;
late String name;
AreaModel(
this.id,
this.name,
);
AreaModel.fromJson(Map<String, dynamic> json) {
id = int.parse(json['id'].toString());
name = json['name'];
}
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
};
}
}
感谢您的答复。非常赞赏。
解决方案
几乎没有像 on 解析器这样的错误 on AreaModel
doesn't have name
,而是它包含area
,还有一些拼写错误,通过这段代码,你就会明白这个概念。
class AreaModel {
final int id;
final String area;
AreaModel({
required this.id,
required this.area,
});
Map<String, dynamic> toMap() {
return {
'id': id,
'area': area,
};
}
factory AreaModel.fromMap(Map<String, dynamic> map) {
return AreaModel(
id: map['id'],
area: map['area'],
);
}
String toJson() => json.encode(toMap());
factory AreaModel.fromJson(String source) =>
AreaModel.fromMap(json.decode(source));
}
class AssesmentModel {
final int id;
final String observer_name;
final String unit;
final AreaModel area;
AssesmentModel({
required this.id,
required this.observer_name,
required this.unit,
required this.area,
});
Map<String, dynamic> toMap() {
return {
'id': id,
'observer_name': observer_name,
'unit': unit,
'area': area.toMap(),
};
}
factory AssesmentModel.fromMap(Map<String, dynamic> map) {
return AssesmentModel(
id: map['id'],
observer_name: map['observer_name'],
unit: map['unit'],
area: AreaModel.fromMap(map['area']),
);
}
String toJson() => json.encode(toMap());
factory AssesmentModel.fromJson(String source) =>
AssesmentModel.fromMap(json.decode(source));
}
main(List<String> args) {
final jsonString =
'{ "id": 1, "observer_name": "Duffy Jhon", "unit": "Belawan - Refinery", "area": { "id": 1, "area": "Area-1" } }';
final m = AssesmentModel.fromMap(jsonDecode(jsonString));
print(m.id);
}
推荐阅读
- python - 如何将数据从托管服务器上传到 Jupyter Hub?
- sql - SQL Query 显示标题的任何部分
- swift - 工具栏正在删除 NavigationView 中的后退按钮
- python - Keras 模型不工作(损失不减少,准确率保持为零)
- web - Github.com 如何知道在推送提交时重新获取其拉取请求页面
- c - sigtimedwait 的另一个信号
- python - 如果一个字符之前出现过,不要修改字符串
- python - 正则表达式量词 Python
- javascript - 坚持使用简单的 JQuery 代码来显示和隐藏页面部分
- c++ - C 块扩展 (libBlocksRuntime) - 为 Block_copy() 使用自定义内存分配器 (Boehm GC)