Flutter Hive:处理复杂 json 的多个类

Posted

技术标签:

【中文标题】Flutter Hive:处理复杂 json 的多个类【英文标题】:Flutter Hive: Handle multiple class for complex json 【发布时间】:2021-02-21 23:37:54 【问题描述】:

我正在尝试向 Hive 添加 JSON 响应以创建缓存数据。 当我尝试将 Json 数据添加到 Hive 时,它​​显示错误:

未处理的异常:HiveError:无法写入,未知类型: 耦合器组。您忘记注册适配器了吗?

我是否需要创建所有类来创建适配器,例如 CouplerGroup? 还是我遗漏了任何细节?

我该如何处理这些数据?

import 'package:hive/hive.dart';

part 'hiveCoupler.g.dart';

@HiveType(typeId: 4)

class Coupler 
  @HiveField(0) 
  int couplerTrackCaseId;
  @HiveField(1)
  int couplerTrackCaseTypeId;
  @HiveField(2)
  int couplerGroupId;
  @HiveField(3) 
  String checklistRef;
  @HiveField(4)
  int totalCount;
  @HiveField(5)
  int currentProgressId;
  @HiveField(6)
  String firstConcretingPersonId;
  @HiveField(7)
  String firstConcretingPersonDate;
  @HiveField(8)
  String secondConcretingPersonId;
  @HiveField(9)
  String secondConcretingPersonDate;
  @HiveField(10)
  String rcCheckerPersonId;
  @HiveField(11)
  String rseCheckerPersonId;
  @HiveField(12)
  int locationId;
  @HiveField(13)
  CouplerGroup couplerGroup;
  @HiveField(14)
  List<CouplerTrackStageList> couplerTrackStageList;
  @HiveField(15)
  CurrentProgress currentProgress;
  @HiveField(16)
  LocationOfSite locationOfSite;
  @HiveField(17)
  List<CouplerTrackCaseReferenceList> couplerTrackCaseReferenceList;
  @HiveField(18)
  List<CouplerTrackCaseOrderNumberList> couplerTrackCaseOrderNumberList;
  @HiveField(19)
  List<CouplerTrackCaseArrivalList> couplerTrackCaseArrivalList;
  @HiveField(20)
  String checkingPersonRcName;
  @HiveField(21)
  int checkingPersonRcFrequency;
  @HiveField(22)
  String checkingPersonRseName;
  @HiveField(23)
  int checkingPersonRseFrequency;
  @HiveField(24)
  String orderNumber;
  @HiveField(25)
  String referenceDesc;
  @HiveField(26)
  String couplerTrackCaseArrivalDate;
  @HiveField(27)
  String checkingPersonRseGrade;
  @HiveField(28)
  String checkingPersonRcGrade;

  Coupler(
      this.couplerTrackCaseId,
      this.couplerTrackCaseTypeId,
      this.couplerGroupId,
      this.checklistRef,
      this.totalCount,
      this.currentProgressId,
      this.firstConcretingPersonId,
      this.firstConcretingPersonDate,
      this.secondConcretingPersonId,
      this.secondConcretingPersonDate,
      this.rcCheckerPersonId,
      this.rseCheckerPersonId,
      this.locationId,
      this.couplerGroup,
      this.couplerTrackStageList,
      this.currentProgress,
      this.locationOfSite,
      this.couplerTrackCaseReferenceList,
      this.couplerTrackCaseOrderNumberList,
      this.couplerTrackCaseArrivalList,
      this.checkingPersonRcName,
      this.checkingPersonRcFrequency,
      this.checkingPersonRseName,
      this.checkingPersonRseFrequency,
      this.orderNumber,
      this.referenceDesc,
      this.couplerTrackCaseArrivalDate,
      this.checkingPersonRseGrade,
      this.checkingPersonRcGrade);

  Coupler.fromJson(Map<String, dynamic> json) 
    couplerTrackCaseId = json['couplerTrackCaseId'];
    couplerTrackCaseTypeId = json['couplerTrackCaseTypeId'];
    couplerGroupId = json['couplerGroupId'];
    checklistRef = json['checklistRef'];
    totalCount = json['totalCount'];
    currentProgressId = json['currentProgressId'];
    firstConcretingPersonId = json['firstConcretingPersonId'];
    firstConcretingPersonDate = json['firstConcretingPersonDate'];
    secondConcretingPersonId = json['secondConcretingPersonId'];
    secondConcretingPersonDate = json['secondConcretingPersonDate'];
    rcCheckerPersonId = json['rcCheckerPersonId'];
    rseCheckerPersonId = json['rseCheckerPersonId'];
    locationId = json['locationId'];
    couplerGroup = json['couplerGroup'] != null
        ? new CouplerGroup.fromJson(json['couplerGroup'])
        : null;
    if (json['couplerTrackStageList'] != null) 
      couplerTrackStageList = new List<CouplerTrackStageList>();
      json['couplerTrackStageList'].forEach((v) 
        couplerTrackStageList.add(new CouplerTrackStageList.fromJson(v));
      );
    
    currentProgress = json['currentProgress'] != null
        ? new CurrentProgress.fromJson(json['currentProgress'])
        : null;
    locationOfSite = json['locationOfSite'] != null
        ? new LocationOfSite.fromJson(json['locationOfSite'])
        : null;
    if (json['couplerTrackCaseReferenceList'] != null) 
      couplerTrackCaseReferenceList = new List<CouplerTrackCaseReferenceList>();
      json['couplerTrackCaseReferenceList'].forEach((v) 
        couplerTrackCaseReferenceList
            .add(new CouplerTrackCaseReferenceList.fromJson(v));
      );
    
    if (json['couplerTrackCaseOrderNumberList'] != null) 
      couplerTrackCaseOrderNumberList =
          new List<CouplerTrackCaseOrderNumberList>();
      json['couplerTrackCaseOrderNumberList'].forEach((v) 
        couplerTrackCaseOrderNumberList
            .add(new CouplerTrackCaseOrderNumberList.fromJson(v));
      );
    
    if (json['couplerTrackCaseArrivalList'] != null) 
      couplerTrackCaseArrivalList = new List<CouplerTrackCaseArrivalList>();
      json['couplerTrackCaseArrivalList'].forEach((v) 
        couplerTrackCaseArrivalList
            .add(new CouplerTrackCaseArrivalList.fromJson(v));
      );
    
    checkingPersonRcName = json['checkingPersonRcName'];
    checkingPersonRcFrequency = json['checkingPersonRcFrequency'];
    checkingPersonRseName = json['checkingPersonRseName'];
    checkingPersonRseFrequency = json['checkingPersonRseFrequency'];
    orderNumber = json['orderNumber'];
    referenceDesc = json['referenceDesc'];
    couplerTrackCaseArrivalDate = json['couplerTrackCaseArrivalDate'];
    checkingPersonRseGrade = json['checkingPersonRseGrade'];
    checkingPersonRcGrade = json['checkingPersonRcGrade'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerTrackCaseId'] = this.couplerTrackCaseId;
    data['couplerTrackCaseTypeId'] = this.couplerTrackCaseTypeId;
    data['couplerGroupId'] = this.couplerGroupId;
    data['checklistRef'] = this.checklistRef;
    data['totalCount'] = this.totalCount;
    data['currentProgressId'] = this.currentProgressId;
    data['firstConcretingPersonId'] = this.firstConcretingPersonId;
    data['firstConcretingPersonDate'] = this.firstConcretingPersonDate;
    data['secondConcretingPersonId'] = this.secondConcretingPersonId;
    data['secondConcretingPersonDate'] = this.secondConcretingPersonDate;
    data['rcCheckerPersonId'] = this.rcCheckerPersonId;
    data['rseCheckerPersonId'] = this.rseCheckerPersonId;
    data['locationId'] = this.locationId;
    if (this.couplerGroup != null) 
      data['couplerGroup'] = this.couplerGroup.toJson();
    
    if (this.couplerTrackStageList != null) 
      data['couplerTrackStageList'] =
          this.couplerTrackStageList.map((v) => v.toJson()).toList();
    
    if (this.currentProgress != null) 
      data['currentProgress'] = this.currentProgress.toJson();
    
    if (this.locationOfSite != null) 
      data['locationOfSite'] = this.locationOfSite.toJson();
    
    if (this.couplerTrackCaseReferenceList != null) 
      data['couplerTrackCaseReferenceList'] =
          this.couplerTrackCaseReferenceList.map((v) => v.toJson()).toList();
    
    if (this.couplerTrackCaseOrderNumberList != null) 
      data['couplerTrackCaseOrderNumberList'] =
          this.couplerTrackCaseOrderNumberList.map((v) => v.toJson()).toList();
    
    if (this.couplerTrackCaseArrivalList != null) 
      data['couplerTrackCaseArrivalList'] =
          this.couplerTrackCaseArrivalList.map((v) => v.toJson()).toList();
    
    data['checkingPersonRcName'] = this.checkingPersonRcName;
    data['checkingPersonRcFrequency'] = this.checkingPersonRcFrequency;
    data['checkingPersonRseName'] = this.checkingPersonRseName;
    data['checkingPersonRseFrequency'] = this.checkingPersonRseFrequency;
    data['orderNumber'] = this.orderNumber;
    data['referenceDesc'] = this.referenceDesc;
    data['couplerTrackCaseArrivalDate'] = this.couplerTrackCaseArrivalDate;
    data['checkingPersonRseGrade'] = this.checkingPersonRseGrade;
    data['checkingPersonRcGrade'] = this.checkingPersonRcGrade;
    return data;
  


class CouplerGroup 
  int couplerGroupId;
  int couplerTypeId;
  String siteId;
  int towerId;
  int floorId;
  String groupDesc;
  int rebarSum;
  CouplerType couplerType;
  CouplerTrackCaseType couplerTrackCaseType;
  Site site;
  Tower tower;
  Floor floor;
  List<CouplerGroupRebarSetups> couplerGroupRebarSetups;
  List<CouplerGroupImages> couplerGroupImages;

  CouplerGroup(
      this.couplerGroupId,
      this.couplerTypeId,
      this.siteId,
      this.towerId,
      this.floorId,
      this.groupDesc,
      this.rebarSum,
      this.couplerType,
      this.couplerTrackCaseType,
      this.site,
      this.tower,
      this.floor,
      this.couplerGroupRebarSetups,
      this.couplerGroupImages);

  CouplerGroup.fromJson(Map<String, dynamic> json) 
    couplerGroupId = json['couplerGroupId'];
    couplerTypeId = json['couplerTypeId'];
    siteId = json['siteId'];
    towerId = json['towerId'];
    floorId = json['floorId'];
    groupDesc = json['groupDesc'];
    rebarSum = json['rebarSum'];
    couplerType = json['couplerType'] != null
        ? new CouplerType.fromJson(json['couplerType'])
        : null;
    couplerTrackCaseType = json['couplerTrackCaseType'] != null
        ? new CouplerTrackCaseType.fromJson(json['couplerTrackCaseType'])
        : null;
    site = json['site'] != null ? new Site.fromJson(json['site']) : null;
    tower = json['tower'] != null ? new Tower.fromJson(json['tower']) : null;
    floor = json['floor'] != null ? new Floor.fromJson(json['floor']) : null;
    if (json['couplerGroupRebarSetups'] != null) 
      couplerGroupRebarSetups = new List<CouplerGroupRebarSetups>();
      json['couplerGroupRebarSetups'].forEach((v) 
        couplerGroupRebarSetups.add(new CouplerGroupRebarSetups.fromJson(v));
      );
    
    if (json['couplerGroupImages'] != null) 
      couplerGroupImages = new List<CouplerGroupImages>();
      json['couplerGroupImages'].forEach((v) 
        couplerGroupImages.add(new CouplerGroupImages.fromJson(v));
      );
    
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerGroupId'] = this.couplerGroupId;
    data['couplerTypeId'] = this.couplerTypeId;
    data['siteId'] = this.siteId;
    data['towerId'] = this.towerId;
    data['floorId'] = this.floorId;
    data['groupDesc'] = this.groupDesc;
    data['rebarSum'] = this.rebarSum;
    if (this.couplerType != null) 
      data['couplerType'] = this.couplerType.toJson();
    
    if (this.couplerTrackCaseType != null) 
      data['couplerTrackCaseType'] = this.couplerTrackCaseType.toJson();
    
    if (this.site != null) 
      data['site'] = this.site.toJson();
    
    if (this.tower != null) 
      data['tower'] = this.tower.toJson();
    
    if (this.floor != null) 
      data['floor'] = this.floor.toJson();
    
    if (this.couplerGroupRebarSetups != null) 
      data['couplerGroupRebarSetups'] =
          this.couplerGroupRebarSetups.map((v) => v.toJson()).toList();
    
    if (this.couplerGroupImages != null) 
      data['couplerGroupImages'] =
          this.couplerGroupImages.map((v) => v.toJson()).toList();
    
    return data;
  


class CouplerType 
  int couplerTypeId;
  int couplerTrackCaseTypeId;
  String couplerTypeDesc;
  double rcInspectFrequency;
  double rseInspectFrequency;

  CouplerType(
      this.couplerTypeId,
      this.couplerTrackCaseTypeId,
      this.couplerTypeDesc,
      this.rcInspectFrequency,
      this.rseInspectFrequency);

  CouplerType.fromJson(Map<String, dynamic> json) 
    couplerTypeId = json['couplerTypeId'];
    couplerTrackCaseTypeId = json['couplerTrackCaseTypeId'];
    couplerTypeDesc = json['couplerTypeDesc'];
    rcInspectFrequency = json['rcInspectFrequency'];
    rseInspectFrequency = json['rseInspectFrequency'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerTypeId'] = this.couplerTypeId;
    data['couplerTrackCaseTypeId'] = this.couplerTrackCaseTypeId;
    data['couplerTypeDesc'] = this.couplerTypeDesc;
    data['rcInspectFrequency'] = this.rcInspectFrequency;
    data['rseInspectFrequency'] = this.rseInspectFrequency;
    return data;
  


class CouplerTrackCaseType 
  int couplerTrackCaseTypeId;
  String caseTypeDesc;

  CouplerTrackCaseType(this.couplerTrackCaseTypeId, this.caseTypeDesc);

  CouplerTrackCaseType.fromJson(Map<String, dynamic> json) 
    couplerTrackCaseTypeId = json['couplerTrackCaseTypeId'];
    caseTypeDesc = json['caseTypeDesc'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerTrackCaseTypeId'] = this.couplerTrackCaseTypeId;
    data['caseTypeDesc'] = this.caseTypeDesc;
    return data;
  


class Site 
  String siteId;
  String siteDesc;
  String handGeometry;
  String teamId;
  String contractNo;
  String startDate;
  String contractTypeId;
  String companyId;
  String parentSiteId;
  String handkeyMifare;
  String archived;
  String projectName;
  String isDegrade;

  Site(
      this.siteId,
      this.siteDesc,
      this.handGeometry,
      this.teamId,
      this.contractNo,
      this.startDate,
      this.contractTypeId,
      this.companyId,
      this.parentSiteId,
      this.handkeyMifare,
      this.archived,
      this.projectName,
      this.isDegrade);

  Site.fromJson(Map<String, dynamic> json) 
    siteId = json['siteId'];
    siteDesc = json['siteDesc'];
    handGeometry = json['handGeometry'];
    teamId = json['teamId'];
    contractNo = json['contractNo'];
    startDate = json['startDate'];
    contractTypeId = json['contractTypeId'];
    companyId = json['companyId'];
    parentSiteId = json['parentSiteId'];
    handkeyMifare = json['handkeyMifare'];
    archived = json['archived'];
    projectName = json['projectName'];
    isDegrade = json['isDegrade'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['siteId'] = this.siteId;
    data['siteDesc'] = this.siteDesc;
    data['handGeometry'] = this.handGeometry;
    data['teamId'] = this.teamId;
    data['contractNo'] = this.contractNo;
    data['startDate'] = this.startDate;
    data['contractTypeId'] = this.contractTypeId;
    data['companyId'] = this.companyId;
    data['parentSiteId'] = this.parentSiteId;
    data['handkeyMifare'] = this.handkeyMifare;
    data['archived'] = this.archived;
    data['projectName'] = this.projectName;
    data['isDegrade'] = this.isDegrade;
    return data;
  


class Tower 
  int towerId;
  String towerDesc;
  String enable;
  String towerShortName;
  String towerDescStr;

  Tower(
      this.towerId,
      this.towerDesc,
      this.enable,
      this.towerShortName,
      this.towerDescStr);

  Tower.fromJson(Map<String, dynamic> json) 
    towerId = json['towerId'];
    towerDesc = json['towerDesc'];
    enable = json['enable'];
    towerShortName = json['towerShortName'];
    towerDescStr = json['towerDescStr'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['towerId'] = this.towerId;
    data['towerDesc'] = this.towerDesc;
    data['enable'] = this.enable;
    data['towerShortName'] = this.towerShortName;
    data['towerDescStr'] = this.towerDescStr;
    return data;
  


class Floor 
  int floorId;
  String floorDesc;
  String enable;
  String floorShortName;
  String floorDescStr;

  Floor(
      this.floorId,
      this.floorDesc,
      this.enable,
      this.floorShortName,
      this.floorDescStr);

  Floor.fromJson(Map<String, dynamic> json) 
    floorId = json['floorId'];
    floorDesc = json['floorDesc'];
    enable = json['enable'];
    floorShortName = json['floorShortName'];
    floorDescStr = json['floorDescStr'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['floorId'] = this.floorId;
    data['floorDesc'] = this.floorDesc;
    data['enable'] = this.enable;
    data['floorShortName'] = this.floorShortName;
    data['floorDescStr'] = this.floorDescStr;
    return data;
  


class CouplerGroupRebarSetups 
  int couplerGroupRebarSetupId;
  int couplerGroupId;
  int referenceRebarFrom;
  int referenceRebarTo;
  String referenceDesc;
  String rebarDesc;
  String flagMultiple;
  List<CouplerGroupRebars> couplerGroupRebars;

  CouplerGroupRebarSetups(
      this.couplerGroupRebarSetupId,
      this.couplerGroupId,
      this.referenceRebarFrom,
      this.referenceRebarTo,
      this.referenceDesc,
      this.rebarDesc,
      this.flagMultiple,
      this.couplerGroupRebars);

  CouplerGroupRebarSetups.fromJson(Map<String, dynamic> json) 
    couplerGroupRebarSetupId = json['couplerGroupRebarSetupId'];
    couplerGroupId = json['couplerGroupId'];
    referenceRebarFrom = json['referenceRebarFrom'];
    referenceRebarTo = json['referenceRebarTo'];
    referenceDesc = json['referenceDesc'];
    rebarDesc = json['rebarDesc'];
    flagMultiple = json['flagMultiple'];
    if (json['couplerGroupRebars'] != null) 
      couplerGroupRebars = new List<CouplerGroupRebars>();
      json['couplerGroupRebars'].forEach((v) 
        couplerGroupRebars.add(new CouplerGroupRebars.fromJson(v));
      );
    
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerGroupRebarSetupId'] = this.couplerGroupRebarSetupId;
    data['couplerGroupId'] = this.couplerGroupId;
    data['referenceRebarFrom'] = this.referenceRebarFrom;
    data['referenceRebarTo'] = this.referenceRebarTo;
    data['referenceDesc'] = this.referenceDesc;
    data['rebarDesc'] = this.rebarDesc;
    data['flagMultiple'] = this.flagMultiple;
    if (this.couplerGroupRebars != null) 
      data['couplerGroupRebars'] =
          this.couplerGroupRebars.map((v) => v.toJson()).toList();
    
    return data;
  


class CouplerGroupRebars 
  int couplerGroupRebarId;
  int couplerGroupId;
  String referenceDesc;
  String rebarDesc;
  int couplerGroupRebarSetupId;
  int couplerGroupRebarSort;

  CouplerGroupRebars(
      this.couplerGroupRebarId,
      this.couplerGroupId,
      this.referenceDesc,
      this.rebarDesc,
      this.couplerGroupRebarSetupId,
      this.couplerGroupRebarSort);

  CouplerGroupRebars.fromJson(Map<String, dynamic> json) 
    couplerGroupRebarId = json['couplerGroupRebarId'];
    couplerGroupId = json['couplerGroupId'];
    referenceDesc = json['referenceDesc'];
    rebarDesc = json['rebarDesc'];
    couplerGroupRebarSetupId = json['couplerGroupRebarSetupId'];
    couplerGroupRebarSort = json['couplerGroupRebarSort'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerGroupRebarId'] = this.couplerGroupRebarId;
    data['couplerGroupId'] = this.couplerGroupId;
    data['referenceDesc'] = this.referenceDesc;
    data['rebarDesc'] = this.rebarDesc;
    data['couplerGroupRebarSetupId'] = this.couplerGroupRebarSetupId;
    data['couplerGroupRebarSort'] = this.couplerGroupRebarSort;
    return data;
  


class CouplerGroupImages 
  int couplerGroupImageId;
  int couplerGroupId;
  int couplerTrackImageId;
  CouplerTrackImage couplerTrackImage;
  String fileData;

  CouplerGroupImages(
      this.couplerGroupImageId,
      this.couplerGroupId,
      this.couplerTrackImageId,
      this.couplerTrackImage,
      this.fileData);

  CouplerGroupImages.fromJson(Map<String, dynamic> json) 
    couplerGroupImageId = json['couplerGroupImageId'];
    couplerGroupId = json['couplerGroupId'];
    couplerTrackImageId = json['couplerTrackImageId'];
    couplerTrackImage = json['couplerTrackImage'] != null
        ? new CouplerTrackImage.fromJson(json['couplerTrackImage'])
        : null;
    fileData = json['fileData'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerGroupImageId'] = this.couplerGroupImageId;
    data['couplerGroupId'] = this.couplerGroupId;
    data['couplerTrackImageId'] = this.couplerTrackImageId;
    if (this.couplerTrackImage != null) 
      data['couplerTrackImage'] = this.couplerTrackImage.toJson();
    
    data['fileData'] = this.fileData;
    return data;
  


class CouplerTrackImage 
  int couplerTrackImageId;
  String originalPhotoPath;

  CouplerTrackImage(this.couplerTrackImageId, this.originalPhotoPath);

  CouplerTrackImage.fromJson(Map<String, dynamic> json) 
    couplerTrackImageId = json['couplerTrackImageId'];
    originalPhotoPath = json['originalPhotoPath'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerTrackImageId'] = this.couplerTrackImageId;
    data['originalPhotoPath'] = this.originalPhotoPath;
    return data;
  


class CouplerTrackStageList 
  int couplerTrackStageId;
  int couplerTrackCaseId;
  int couplerTrackProgressId;
  int couplerTrackCheckerTypeId;
  String passStatus;
  int versionCode;
  String checkedDate;
  String submissionDate;
  String submittedBy;
  String signedDate;
  String signedBy;
  String inputDataPersionId;
  String inputDataDate;
  int signedImageId;

  CouplerTrackStageList(
      this.couplerTrackStageId,
      this.couplerTrackCaseId,
      this.couplerTrackProgressId,
      this.couplerTrackCheckerTypeId,
      this.passStatus,
      this.versionCode,
      this.checkedDate,
      this.submissionDate,
      this.submittedBy,
      this.signedDate,
      this.signedBy,
      this.inputDataPersionId,
      this.inputDataDate,
      this.signedImageId);

  CouplerTrackStageList.fromJson(Map<String, dynamic> json) 
    couplerTrackStageId = json['couplerTrackStageId'];
    couplerTrackCaseId = json['couplerTrackCaseId'];
    couplerTrackProgressId = json['couplerTrackProgressId'];
    couplerTrackCheckerTypeId = json['couplerTrackCheckerTypeId'];
    passStatus = json['passStatus'];
    versionCode = json['versionCode'];
    checkedDate = json['checkedDate'];
    submissionDate = json['submissionDate'];
    submittedBy = json['submittedBy'];
    signedDate = json['signedDate'];
    signedBy = json['signedBy'];
    inputDataPersionId = json['inputDataPersionId'];
    inputDataDate = json['inputDataDate'];
    signedImageId = json['signedImageId'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerTrackStageId'] = this.couplerTrackStageId;
    data['couplerTrackCaseId'] = this.couplerTrackCaseId;
    data['couplerTrackProgressId'] = this.couplerTrackProgressId;
    data['couplerTrackCheckerTypeId'] = this.couplerTrackCheckerTypeId;
    data['passStatus'] = this.passStatus;
    data['versionCode'] = this.versionCode;
    data['checkedDate'] = this.checkedDate;
    data['submissionDate'] = this.submissionDate;
    data['submittedBy'] = this.submittedBy;
    data['signedDate'] = this.signedDate;
    data['signedBy'] = this.signedBy;
    data['inputDataPersionId'] = this.inputDataPersionId;
    data['inputDataDate'] = this.inputDataDate;
    data['signedImageId'] = this.signedImageId;
    return data;
  


class CurrentProgress 
  int couplerTrackProgressId;
  String couplerTrackProgressDesc;

  CurrentProgress(this.couplerTrackProgressId, this.couplerTrackProgressDesc);

  CurrentProgress.fromJson(Map<String, dynamic> json) 
    couplerTrackProgressId = json['couplerTrackProgressId'];
    couplerTrackProgressDesc = json['couplerTrackProgressDesc'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerTrackProgressId'] = this.couplerTrackProgressId;
    data['couplerTrackProgressDesc'] = this.couplerTrackProgressDesc;
    return data;
  


class LocationOfSite 
  int locationId;
  String siteId;
  String locationDesc;
  String enable;

  LocationOfSite(
      this.locationId, this.siteId, this.locationDesc, this.enable);

  LocationOfSite.fromJson(Map<String, dynamic> json) 
    locationId = json['locationId'];
    siteId = json['siteId'];
    locationDesc = json['locationDesc'];
    enable = json['enable'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['locationId'] = this.locationId;
    data['siteId'] = this.siteId;
    data['locationDesc'] = this.locationDesc;
    data['enable'] = this.enable;
    return data;
  


class CouplerTrackCaseReferenceList 
  int ctCaseReferenceId;
  int couplerTrackCaseId;
  int referenceId;
  String referenceDesc;

  CouplerTrackCaseReferenceList(
      this.ctCaseReferenceId,
      this.couplerTrackCaseId,
      this.referenceId,
      this.referenceDesc);

  CouplerTrackCaseReferenceList.fromJson(Map<String, dynamic> json) 
    ctCaseReferenceId = json['ctCaseReferenceId'];
    couplerTrackCaseId = json['couplerTrackCaseId'];
    referenceId = json['referenceId'];
    referenceDesc = json['referenceDesc'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['ctCaseReferenceId'] = this.ctCaseReferenceId;
    data['couplerTrackCaseId'] = this.couplerTrackCaseId;
    data['referenceId'] = this.referenceId;
    data['referenceDesc'] = this.referenceDesc;
    return data;
  

【问题讨论】:

每个 HiveField 都需要是 hive 已知的类,如果您有自定义类,您还需要将它们注册为 hive 类型。 可以提供样品吗? 【参考方案1】:

我发现在类之前添加“@HiveType”可以解决这个问题。谢谢

import 'package:hive/hive.dart';

part 'hiveCoupler.g.dart';

@HiveType(typeId: 4)

class Coupler 
  @HiveField(0) 
  int couplerTrackCaseId;
  @HiveField(1)
  int couplerTrackCaseTypeId;
  @HiveField(2)
  int couplerGroupId;
  @HiveField(3) 
  String checklistRef;
  @HiveField(4)
  int totalCount;
  @HiveField(5)
  int currentProgressId;
  @HiveField(6)
  String firstConcretingPersonId;
  @HiveField(7)
  String firstConcretingPersonDate;
  @HiveField(8)
  String secondConcretingPersonId;
  @HiveField(9)
  String secondConcretingPersonDate;
  @HiveField(10)
  String rcCheckerPersonId;
  @HiveField(11)
  String rseCheckerPersonId;
  @HiveField(12)
  int locationId;
  @HiveField(13)
  CouplerGroup couplerGroup;
  @HiveField(14)
  List<CouplerTrackStageList> couplerTrackStageList;
  @HiveField(15)
  CurrentProgress currentProgress;
  @HiveField(16)
  LocationOfSite locationOfSite;
  @HiveField(17)
  List<CouplerTrackCaseReferenceList> couplerTrackCaseReferenceList;
  @HiveField(18)
  List<CouplerTrackCaseOrderNumberList> couplerTrackCaseOrderNumberList;
  @HiveField(19)
  List<CouplerTrackCaseArrivalList> couplerTrackCaseArrivalList;
  @HiveField(20)
  String checkingPersonRcName;
  @HiveField(21)
  int checkingPersonRcFrequency;
  @HiveField(22)
  String checkingPersonRseName;
  @HiveField(23)
  int checkingPersonRseFrequency;
  @HiveField(24)
  String orderNumber;
  @HiveField(25)
  String referenceDesc;
  @HiveField(26)
  String couplerTrackCaseArrivalDate;
  @HiveField(27)
  String checkingPersonRseGrade;
  @HiveField(28)
  String checkingPersonRcGrade;

  Coupler(
      this.couplerTrackCaseId,
      this.couplerTrackCaseTypeId,
      this.couplerGroupId,
      this.checklistRef,
      this.totalCount,
      this.currentProgressId,
      this.firstConcretingPersonId,
      this.firstConcretingPersonDate,
      this.secondConcretingPersonId,
      this.secondConcretingPersonDate,
      this.rcCheckerPersonId,
      this.rseCheckerPersonId,
      this.locationId,
      this.couplerGroup,
      this.couplerTrackStageList,
      this.currentProgress,
      this.locationOfSite,
      this.couplerTrackCaseReferenceList,
      this.couplerTrackCaseOrderNumberList,
      this.couplerTrackCaseArrivalList,
      this.checkingPersonRcName,
      this.checkingPersonRcFrequency,
      this.checkingPersonRseName,
      this.checkingPersonRseFrequency,
      this.orderNumber,
      this.referenceDesc,
      this.couplerTrackCaseArrivalDate,
      this.checkingPersonRseGrade,
      this.checkingPersonRcGrade);

  Coupler.fromJson(Map<String, dynamic> json) 
    couplerTrackCaseId = json['couplerTrackCaseId'];
    couplerTrackCaseTypeId = json['couplerTrackCaseTypeId'];
    couplerGroupId = json['couplerGroupId'];
    checklistRef = json['checklistRef'];
    totalCount = json['totalCount'];
    currentProgressId = json['currentProgressId'];
    firstConcretingPersonId = json['firstConcretingPersonId'];
    firstConcretingPersonDate = json['firstConcretingPersonDate'];
    secondConcretingPersonId = json['secondConcretingPersonId'];
    secondConcretingPersonDate = json['secondConcretingPersonDate'];
    rcCheckerPersonId = json['rcCheckerPersonId'];
    rseCheckerPersonId = json['rseCheckerPersonId'];
    locationId = json['locationId'];
    couplerGroup = json['couplerGroup'] != null
        ? new CouplerGroup.fromJson(json['couplerGroup'])
        : null;
    if (json['couplerTrackStageList'] != null) 
      couplerTrackStageList = new List<CouplerTrackStageList>();
      json['couplerTrackStageList'].forEach((v) 
        couplerTrackStageList.add(new CouplerTrackStageList.fromJson(v));
      );
    
    currentProgress = json['currentProgress'] != null
        ? new CurrentProgress.fromJson(json['currentProgress'])
        : null;
    locationOfSite = json['locationOfSite'] != null
        ? new LocationOfSite.fromJson(json['locationOfSite'])
        : null;
    if (json['couplerTrackCaseReferenceList'] != null) 
      couplerTrackCaseReferenceList = new List<CouplerTrackCaseReferenceList>();
      json['couplerTrackCaseReferenceList'].forEach((v) 
        couplerTrackCaseReferenceList
            .add(new CouplerTrackCaseReferenceList.fromJson(v));
      );
    
    if (json['couplerTrackCaseOrderNumberList'] != null) 
      couplerTrackCaseOrderNumberList =
          new List<CouplerTrackCaseOrderNumberList>();
      json['couplerTrackCaseOrderNumberList'].forEach((v) 
        couplerTrackCaseOrderNumberList
            .add(new CouplerTrackCaseOrderNumberList.fromJson(v));
      );
    
    if (json['couplerTrackCaseArrivalList'] != null) 
      couplerTrackCaseArrivalList = new List<CouplerTrackCaseArrivalList>();
      json['couplerTrackCaseArrivalList'].forEach((v) 
        couplerTrackCaseArrivalList
            .add(new CouplerTrackCaseArrivalList.fromJson(v));
      );
    
    checkingPersonRcName = json['checkingPersonRcName'];
    checkingPersonRcFrequency = json['checkingPersonRcFrequency'];
    checkingPersonRseName = json['checkingPersonRseName'];
    checkingPersonRseFrequency = json['checkingPersonRseFrequency'];
    orderNumber = json['orderNumber'];
    referenceDesc = json['referenceDesc'];
    couplerTrackCaseArrivalDate = json['couplerTrackCaseArrivalDate'];
    checkingPersonRseGrade = json['checkingPersonRseGrade'];
    checkingPersonRcGrade = json['checkingPersonRcGrade'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerTrackCaseId'] = this.couplerTrackCaseId;
    data['couplerTrackCaseTypeId'] = this.couplerTrackCaseTypeId;
    data['couplerGroupId'] = this.couplerGroupId;
    data['checklistRef'] = this.checklistRef;
    data['totalCount'] = this.totalCount;
    data['currentProgressId'] = this.currentProgressId;
    data['firstConcretingPersonId'] = this.firstConcretingPersonId;
    data['firstConcretingPersonDate'] = this.firstConcretingPersonDate;
    data['secondConcretingPersonId'] = this.secondConcretingPersonId;
    data['secondConcretingPersonDate'] = this.secondConcretingPersonDate;
    data['rcCheckerPersonId'] = this.rcCheckerPersonId;
    data['rseCheckerPersonId'] = this.rseCheckerPersonId;
    data['locationId'] = this.locationId;
    if (this.couplerGroup != null) 
      data['couplerGroup'] = this.couplerGroup.toJson();
    
    if (this.couplerTrackStageList != null) 
      data['couplerTrackStageList'] =
          this.couplerTrackStageList.map((v) => v.toJson()).toList();
    
    if (this.currentProgress != null) 
      data['currentProgress'] = this.currentProgress.toJson();
    
    if (this.locationOfSite != null) 
      data['locationOfSite'] = this.locationOfSite.toJson();
    
    if (this.couplerTrackCaseReferenceList != null) 
      data['couplerTrackCaseReferenceList'] =
          this.couplerTrackCaseReferenceList.map((v) => v.toJson()).toList();
    
    if (this.couplerTrackCaseOrderNumberList != null) 
      data['couplerTrackCaseOrderNumberList'] =
          this.couplerTrackCaseOrderNumberList.map((v) => v.toJson()).toList();
    
    if (this.couplerTrackCaseArrivalList != null) 
      data['couplerTrackCaseArrivalList'] =
          this.couplerTrackCaseArrivalList.map((v) => v.toJson()).toList();
    
    data['checkingPersonRcName'] = this.checkingPersonRcName;
    data['checkingPersonRcFrequency'] = this.checkingPersonRcFrequency;
    data['checkingPersonRseName'] = this.checkingPersonRseName;
    data['checkingPersonRseFrequency'] = this.checkingPersonRseFrequency;
    data['orderNumber'] = this.orderNumber;
    data['referenceDesc'] = this.referenceDesc;
    data['couplerTrackCaseArrivalDate'] = this.couplerTrackCaseArrivalDate;
    data['checkingPersonRseGrade'] = this.checkingPersonRseGrade;
    data['checkingPersonRcGrade'] = this.checkingPersonRcGrade;
    return data;
  


@HiveType(typeId: 5)
class CouplerGroup 
  int couplerGroupId;
  int couplerTypeId;
  String siteId;
  int towerId;
  int floorId;
  String groupDesc;
  int rebarSum;
  CouplerType couplerType;
  CouplerTrackCaseType couplerTrackCaseType;
  Site site;
  Tower tower;
  Floor floor;
  List<CouplerGroupRebarSetups> couplerGroupRebarSetups;
  List<CouplerGroupImages> couplerGroupImages;

  CouplerGroup(
      this.couplerGroupId,
      this.couplerTypeId,
      this.siteId,
      this.towerId,
      this.floorId,
      this.groupDesc,
      this.rebarSum,
      this.couplerType,
      this.couplerTrackCaseType,
      this.site,
      this.tower,
      this.floor,
      this.couplerGroupRebarSetups,
      this.couplerGroupImages);

  CouplerGroup.fromJson(Map<String, dynamic> json) 
    couplerGroupId = json['couplerGroupId'];
    couplerTypeId = json['couplerTypeId'];
    siteId = json['siteId'];
    towerId = json['towerId'];
    floorId = json['floorId'];
    groupDesc = json['groupDesc'];
    rebarSum = json['rebarSum'];
    couplerType = json['couplerType'] != null
        ? new CouplerType.fromJson(json['couplerType'])
        : null;
    couplerTrackCaseType = json['couplerTrackCaseType'] != null
        ? new CouplerTrackCaseType.fromJson(json['couplerTrackCaseType'])
        : null;
    site = json['site'] != null ? new Site.fromJson(json['site']) : null;
    tower = json['tower'] != null ? new Tower.fromJson(json['tower']) : null;
    floor = json['floor'] != null ? new Floor.fromJson(json['floor']) : null;
    if (json['couplerGroupRebarSetups'] != null) 
      couplerGroupRebarSetups = new List<CouplerGroupRebarSetups>();
      json['couplerGroupRebarSetups'].forEach((v) 
        couplerGroupRebarSetups.add(new CouplerGroupRebarSetups.fromJson(v));
      );
    
    if (json['couplerGroupImages'] != null) 
      couplerGroupImages = new List<CouplerGroupImages>();
      json['couplerGroupImages'].forEach((v) 
        couplerGroupImages.add(new CouplerGroupImages.fromJson(v));
      );
    
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerGroupId'] = this.couplerGroupId;
    data['couplerTypeId'] = this.couplerTypeId;
    data['siteId'] = this.siteId;
    data['towerId'] = this.towerId;
    data['floorId'] = this.floorId;
    data['groupDesc'] = this.groupDesc;
    data['rebarSum'] = this.rebarSum;
    if (this.couplerType != null) 
      data['couplerType'] = this.couplerType.toJson();
    
    if (this.couplerTrackCaseType != null) 
      data['couplerTrackCaseType'] = this.couplerTrackCaseType.toJson();
    
    if (this.site != null) 
      data['site'] = this.site.toJson();
    
    if (this.tower != null) 
      data['tower'] = this.tower.toJson();
    
    if (this.floor != null) 
      data['floor'] = this.floor.toJson();
    
    if (this.couplerGroupRebarSetups != null) 
      data['couplerGroupRebarSetups'] =
          this.couplerGroupRebarSetups.map((v) => v.toJson()).toList();
    
    if (this.couplerGroupImages != null) 
      data['couplerGroupImages'] =
          this.couplerGroupImages.map((v) => v.toJson()).toList();
    
    return data;
  


@HiveType(typeId: 6)
class CouplerType 
  int couplerTypeId;
  int couplerTrackCaseTypeId;
  String couplerTypeDesc;
  double rcInspectFrequency;
  double rseInspectFrequency;

  CouplerType(
      this.couplerTypeId,
      this.couplerTrackCaseTypeId,
      this.couplerTypeDesc,
      this.rcInspectFrequency,
      this.rseInspectFrequency);

  CouplerType.fromJson(Map<String, dynamic> json) 
    couplerTypeId = json['couplerTypeId'];
    couplerTrackCaseTypeId = json['couplerTrackCaseTypeId'];
    couplerTypeDesc = json['couplerTypeDesc'];
    rcInspectFrequency = json['rcInspectFrequency'];
    rseInspectFrequency = json['rseInspectFrequency'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerTypeId'] = this.couplerTypeId;
    data['couplerTrackCaseTypeId'] = this.couplerTrackCaseTypeId;
    data['couplerTypeDesc'] = this.couplerTypeDesc;
    data['rcInspectFrequency'] = this.rcInspectFrequency;
    data['rseInspectFrequency'] = this.rseInspectFrequency;
    return data;
  


@HiveType(typeId: 7)
class CouplerTrackCaseType 
  int couplerTrackCaseTypeId;
  String caseTypeDesc;

  CouplerTrackCaseType(this.couplerTrackCaseTypeId, this.caseTypeDesc);

  CouplerTrackCaseType.fromJson(Map<String, dynamic> json) 
    couplerTrackCaseTypeId = json['couplerTrackCaseTypeId'];
    caseTypeDesc = json['caseTypeDesc'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerTrackCaseTypeId'] = this.couplerTrackCaseTypeId;
    data['caseTypeDesc'] = this.caseTypeDesc;
    return data;
  


@HiveType(typeId: 8)
class Site 
  String siteId;
  String siteDesc;
  String handGeometry;
  String teamId;
  String contractNo;
  String startDate;
  String contractTypeId;
  String companyId;
  String parentSiteId;
  String handkeyMifare;
  String archived;
  String projectName;
  String isDegrade;

  Site(
      this.siteId,
      this.siteDesc,
      this.handGeometry,
      this.teamId,
      this.contractNo,
      this.startDate,
      this.contractTypeId,
      this.companyId,
      this.parentSiteId,
      this.handkeyMifare,
      this.archived,
      this.projectName,
      this.isDegrade);

  Site.fromJson(Map<String, dynamic> json) 
    siteId = json['siteId'];
    siteDesc = json['siteDesc'];
    handGeometry = json['handGeometry'];
    teamId = json['teamId'];
    contractNo = json['contractNo'];
    startDate = json['startDate'];
    contractTypeId = json['contractTypeId'];
    companyId = json['companyId'];
    parentSiteId = json['parentSiteId'];
    handkeyMifare = json['handkeyMifare'];
    archived = json['archived'];
    projectName = json['projectName'];
    isDegrade = json['isDegrade'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['siteId'] = this.siteId;
    data['siteDesc'] = this.siteDesc;
    data['handGeometry'] = this.handGeometry;
    data['teamId'] = this.teamId;
    data['contractNo'] = this.contractNo;
    data['startDate'] = this.startDate;
    data['contractTypeId'] = this.contractTypeId;
    data['companyId'] = this.companyId;
    data['parentSiteId'] = this.parentSiteId;
    data['handkeyMifare'] = this.handkeyMifare;
    data['archived'] = this.archived;
    data['projectName'] = this.projectName;
    data['isDegrade'] = this.isDegrade;
    return data;
  


@HiveType(typeId: 9)
class Tower 
  int towerId;
  String towerDesc;
  String enable;
  String towerShortName;
  String towerDescStr;

  Tower(
      this.towerId,
      this.towerDesc,
      this.enable,
      this.towerShortName,
      this.towerDescStr);

  Tower.fromJson(Map<String, dynamic> json) 
    towerId = json['towerId'];
    towerDesc = json['towerDesc'];
    enable = json['enable'];
    towerShortName = json['towerShortName'];
    towerDescStr = json['towerDescStr'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['towerId'] = this.towerId;
    data['towerDesc'] = this.towerDesc;
    data['enable'] = this.enable;
    data['towerShortName'] = this.towerShortName;
    data['towerDescStr'] = this.towerDescStr;
    return data;
  


@HiveType(typeId: 10)
class Floor 
  int floorId;
  String floorDesc;
  String enable;
  String floorShortName;
  String floorDescStr;

  Floor(
      this.floorId,
      this.floorDesc,
      this.enable,
      this.floorShortName,
      this.floorDescStr);

  Floor.fromJson(Map<String, dynamic> json) 
    floorId = json['floorId'];
    floorDesc = json['floorDesc'];
    enable = json['enable'];
    floorShortName = json['floorShortName'];
    floorDescStr = json['floorDescStr'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['floorId'] = this.floorId;
    data['floorDesc'] = this.floorDesc;
    data['enable'] = this.enable;
    data['floorShortName'] = this.floorShortName;
    data['floorDescStr'] = this.floorDescStr;
    return data;
  


@HiveType(typeId: 11)
class CouplerGroupRebarSetups 
  int couplerGroupRebarSetupId;
  int couplerGroupId;
  int referenceRebarFrom;
  int referenceRebarTo;
  String referenceDesc;
  String rebarDesc;
  String flagMultiple;
  List<CouplerGroupRebars> couplerGroupRebars;

  CouplerGroupRebarSetups(
      this.couplerGroupRebarSetupId,
      this.couplerGroupId,
      this.referenceRebarFrom,
      this.referenceRebarTo,
      this.referenceDesc,
      this.rebarDesc,
      this.flagMultiple,
      this.couplerGroupRebars);

  CouplerGroupRebarSetups.fromJson(Map<String, dynamic> json) 
    couplerGroupRebarSetupId = json['couplerGroupRebarSetupId'];
    couplerGroupId = json['couplerGroupId'];
    referenceRebarFrom = json['referenceRebarFrom'];
    referenceRebarTo = json['referenceRebarTo'];
    referenceDesc = json['referenceDesc'];
    rebarDesc = json['rebarDesc'];
    flagMultiple = json['flagMultiple'];
    if (json['couplerGroupRebars'] != null) 
      couplerGroupRebars = new List<CouplerGroupRebars>();
      json['couplerGroupRebars'].forEach((v) 
        couplerGroupRebars.add(new CouplerGroupRebars.fromJson(v));
      );
    
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['couplerGroupRebarSetupId'] = this.couplerGroupRebarSetupId;
    data['couplerGroupId'] = this.couplerGroupId;
    data['referenceRebarFrom'] = this.referenceRebarFrom;
    data['referenceRebarTo'] = this.referenceRebarTo;
    data['referenceDesc'] = this.referenceDesc;
    data['rebarDesc'] = this.rebarDesc;
    data['flagMultiple'] = this.flagMultiple;
    if (this.couplerGroupRebars != null) 
      data['couplerGroupRebars'] =
          this.couplerGroupRebars.map((v) => v.toJson()).toList();
    
    return data;
  

【讨论】:

以上是关于Flutter Hive:处理复杂 json 的多个类的主要内容,如果未能解决你的问题,请参考以下文章

Hive处理Json数据

如何使用 Flutter 将复杂的 JSON 数据存储到 Firebase 实时数据库中

Flutter 中的多页面状态处理

将数据从多个 Hive 表转换为复杂 JSON

Flutter:如何解析超复杂的 json 文件?

在 Flutter 中编码/解码复杂的 Json