' 不是“AssesmentModel”类型的子类型?,flutter,dart"/>

首页 > 解决方案 > 键入'_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,
    };
  }
}

感谢您的答复。非常赞赏。

标签: flutterdart

解决方案


几乎没有像 on 解析器这样的错误 on AreaModeldoesn'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);
}


推荐阅读