One of my field use fromJson property from JsonKey annotation, but the method is not actually generated inside *.freezed.dart file.
Is this property not supported or i use it incorrectly?
My class
@immutable
abstract class RegistrationHistoryData with _$RegistrationHistoryData {
const factory RegistrationHistoryData(
@JsonKey(name: 'RegistrationNo') final String registrationNo,
@JsonKey(name: 'SRRegistrationType', fromJson: _registrationNameFromType)
final String registrationType,
@JsonKey(name: 'RegistrationDate_yMdHms') final String registrationDate,
@JsonKey(name: 'RegistrationTime') final String registrationTime,
@JsonKey(name: 'RegistrationQue') final int que,
@JsonKey(name: 'ActualVisitDate_yMdHms') final String actualVisitDate,
@JsonKey(name: 'AppointmentNo') final String appoitmentNo,
@JsonKey(name: 'FromRegistrationNo') final String fromRegistrationNo,
@JsonKey(name: 'ParamedicID') final String doctorId,
@JsonKey(name: 'ParamedicName') final String doctorName,
@JsonKey(name: 'ServiceUnitID') final String unitId,
@JsonKey(name: 'ServiceUnitName') final String unitName,
@JsonKey(name: 'GuarantorID') final String guarantorId,
@JsonKey(name: 'GuarantorName') final String guarantor,
@JsonKey(name: 'VisitTypeID') final String visitTypeId,
@JsonKey(name: 'VisitTypeName') final String visitType,
@JsonKey(name: 'Notes') final String notes,
@JsonKey(name: 'DiagnoseID') final String diagnoseId,
@JsonKey(name: 'DiagnoseText') final String diagnose,
@JsonKey(name: 'DischargeDate_yMdHms') final String dischargeDate,
@JsonKey(name: 'DischargeTime') final String dischargeTime,
@JsonKey(name: 'DischargeNotes') final String dischargeNotes,
@JsonKey(name: 'DischargeMedicalNotes') final String dischargeMedicalNotes,
) = _RegistrationHistoryData;
static String _registrationNameFromType(String type) {
switch (type) {
case 'EMR':
return 'Emergency';
break;
case 'OPR':
return 'Rawat Jalan';
break;
case 'IPR':
return 'Rawat Inap';
break;
default:
return null;
}
}
factory RegistrationHistoryData.fromJson(Map<String, dynamic> json) =>
_$RegistrationHistoryDataFromJson(json);
}
Since you are using the @immutable decorator, are you using an outdated version?
Ah yes im using outdated version but then after reading your reply i updated the package to version 0.10.3 and change the annotation to @freezed
But even after that and rebuilding my class i still got Undefined name '_registrationNameFromType'. error in the generated file
Updated class
@freezed
abstract class RegistrationHistoryData with _$RegistrationHistoryData {
@JsonSerializable(explicitToJson: true)
const factory RegistrationHistoryData(
@JsonKey(name: 'RegistrationNo') final String registrationNo,
@JsonKey(name: 'SRRegistrationType', fromJson: _registrationNameFromType)
final String registrationType,
@JsonKey(name: 'RegistrationDate_yMdHms') final String registrationDate,
@JsonKey(name: 'RegistrationTime') final String registrationTime,
@JsonKey(name: 'RegistrationQue') final int que,
@JsonKey(name: 'ActualVisitDate_yMdHms') final String actualVisitDate,
@JsonKey(name: 'AppointmentNo') final String appoitmentNo,
@JsonKey(name: 'FromRegistrationNo') final String fromRegistrationNo,
@JsonKey(name: 'ParamedicID') final String doctorId,
@JsonKey(name: 'ParamedicName') final String doctorName,
@JsonKey(name: 'ServiceUnitID') final String unitId,
@JsonKey(name: 'ServiceUnitName') final String unitName,
@JsonKey(name: 'GuarantorID') final String guarantorId,
@JsonKey(name: 'GuarantorName') final String guarantor,
@JsonKey(name: 'VisitTypeID') final String visitTypeId,
@JsonKey(name: 'VisitTypeName') final String visitType,
@JsonKey(name: 'Notes') final String notes,
@JsonKey(name: 'DiagnoseID') final String diagnoseId,
@JsonKey(name: 'DiagnoseText') final String diagnose,
@JsonKey(name: 'DischargeDate_yMdHms') final String dischargeDate,
@JsonKey(name: 'DischargeTime') final String dischargeTime,
@JsonKey(name: 'DischargeNotes') final String dischargeNotes,
@JsonKey(name: 'DischargeMedicalNotes') final String dischargeMedicalNotes,
) = _RegistrationHistoryData;
static String _registrationNameFromType(String type) {
switch (type) {
case 'EMR':
return 'Emergency';
break;
case 'OPR':
return 'Rawat Jalan';
break;
case 'IPR':
return 'Rawat Inap';
break;
default:
return null;
}
}
factory RegistrationHistoryData.fromJson(Map<String, dynamic> json) =>
_$RegistrationHistoryDataFromJson(json);
}
Oh, I misunderstood the error.
It sounds related to https://github.com/rrousselGit/freezed/issues/123, where the cause is the static.
If you extract _registrationNameFromType as a top-level function inside of using static, that should work.
If you extract _registrationNameFromType as a top-level function inside of using static, that should work.
Yup extracting the function as a top-level function does the job, i did a simple unit test and it all worked as expected.
Thankyou for the help!
@rrousselGit It that info (top-level function about custom methods) a tip to be referenced in the documentation? Got the same problem until finding this "issue". If so, I will submit a PR.
Sure go ahead