I am facing an issue in my code. I am sending an object "report" which has nested classes such as this one called 'non conformities'. Inside this I am sending some files. At moment I am sending only bytes but I want to add the filename to it.
Now the key is actually showing the filename but the name of the property (the one next to map entry) it is showing also the filename when it should show 'configFile'. My question is: is it possible to show a different name for the map entry and the key? So what I want should be:
13 = {map entry} 'configFile' ->
key = dummy.pdf
value = (the value showed in the picture)
this is my code:
@JsonSerializable(explicitToJson: true)
class ReportNonCompliancePosition {
ReportNonCompliancePosition({
this.uuid,
this.fault,
this.location,
this.mainFailure,
this.secondaryFailure, //THIS GET FROM CLASS CODEGORUP
this.description,
this.distributionChannel,
this.fuseStatus, //ASK TO MARIAM
this.matnr,
this.configFile, //BASE64
this.sdFile,
this.blackBoxFile,
this.layoutPlantFile,
this.images,
});
final String? uuid;
final ReportNonComplianceFault? fault;
final ReportNonComplianceLocation? location;
final ReportNonComplianceMainFailure? mainFailure;
final ReportNonComplianceSecondaryFailure? secondaryFailure;
final String? description;
final String? distributionChannel;
final String? fuseStatus;
final String? matnr;
final String? configFile;
final String? sdFile;
final String? blackBoxFile;
final String? layoutPlantFile;
final List<String>? images;
factory ReportNonCompliancePosition.fromJson(Map<String, dynamic> json) => _$ReportNonCompliancePositionFromJson(json);
bool get isAssembly => fault?.code == '0001';
Map<String, dynamic> toJson() => _$ReportNonCompliancePositionToJson(this);
Future<Map<String, dynamic>> toReportToJson() async {
final fileHandler = Locator.get<IFileHandler>();
//CONVERT IMAGES TO BASE64
final configFileInBase64 = await fileHandler.getFilesInBase64(fileNames: [configFile]);
final sdFileInBase64 = await fileHandler.getFilesInBase64(fileNames: [sdFile]);
final blackBoxFileInBase64 = await fileHandler.getFilesInBase64(fileNames: [blackBoxFile]);
final layoutPlantFileInBase64 = await fileHandler.getFilesInBase64(fileNames: [layoutPlantFile]);
final imagesInBase64 = await fileHandler.getFilesInBase64(fileNames: images ?? []);
final configFileSplit = configFile?.split('/');
final configFileWithExtension =
configFileSplit != null && configFileSplit.isNotEmpty ? configFileSplit.last : null;
final jsonData = {
'uuid': uuid ?? '',
'fault': fault?.reportToJson() ?? {},
'location': location?.reportToJson() ?? {},
'mainFailure': mainFailure?.reportToJson() ?? {},
'secondaryFailure': secondaryFailure?.reportToJson() ?? {},
'description': description ?? '',
'distributionChannel': distributionChannel ?? '',
'fuseStatus': fuseStatus ?? '',
'matnr': matnr ?? '',
'sdFile': sdFileInBase64.firstOrNull,
'blackBoxFile': blackBoxFileInBase64.firstOrNull,
'layoutPlantFile': layoutPlantFileInBase64.firstOrNull,
'images': imagesInBase64
};
// Add configFile with dynamic key if it exists
if (configFileWithExtension != null) {
final configFileMap = configFileInBase64.firstOrNull;
jsonData[configFileWithExtension] = configFileMap;
}
return jsonData;
}
ReportNonCompliancePosition copyWith({
String? uuid,
ReportNonComplianceFault? fault,
ReportNonComplianceLocation? location,
ReportNonComplianceMainFailure? mainFailure,
ReportNonComplianceSecondaryFailure? secondaryFailure,
String? description,
String? distributionChannel,
String? fuseStatus,
String? matnr,
String? configFile,
String? sdFile,
String? blackBoxFile,
String? layoutPlantFile,
List<String>? images,
bool force = false,
bool forceMaterial = false,
}) {
return ReportNonCompliancePosition(
uuid: uuid ?? this.uuid,
fault: fault ?? this.fault,
location: force ? location : (location ?? this.location),
mainFailure: force ? mainFailure : (mainFailure ?? this.mainFailure),
secondaryFailure: force ? secondaryFailure : (secondaryFailure ?? this.secondaryFailure),
description: description ?? this.description,
distributionChannel: distributionChannel ?? this.distributionChannel,
fuseStatus: fuseStatus ?? this.fuseStatus,
matnr: forceMaterial ? matnr : (matnr ?? this.matnr),
configFile: configFile ?? this.configFile,
sdFile: sdFile ?? this.sdFile,
blackBoxFile: blackBoxFile ?? this.blackBoxFile,
layoutPlantFile: layoutPlantFile ?? this.layoutPlantFile,
images: images ?? this.images,
);
}
ReportNonCompliancePosition deleteFiles({
bool configFile = false,
bool sdFile = false,
bool blackBoxFile = false,
bool layoutPlantFile = false,
}) {
return ReportNonCompliancePosition(
uuid: uuid,
fault: fault,
location: location,
mainFailure: mainFailure,
secondaryFailure: secondaryFailure,
description: description,
distributionChannel: distributionChannel,
fuseStatus: fuseStatus,
matnr: matnr,
configFile: configFile ? null : this.configFile,
sdFile: sdFile ? null : this.sdFile,
blackBoxFile: blackBoxFile ? null : this.blackBoxFile,
layoutPlantFile: layoutPlantFile ? null : this.layoutPlantFile,
images: images,
);
}
ReportNonCompliancePosition deleteSecondaryFailure() {
return ReportNonCompliancePosition(
uuid: uuid,
fault: fault,
location: location,
mainFailure: mainFailure,
secondaryFailure: null,
description: description,
distributionChannel: distributionChannel,
fuseStatus: fuseStatus,
matnr: matnr,
configFile: configFile,
sdFile: sdFile,
blackBoxFile: blackBoxFile,
layoutPlantFile: layoutPlantFile,
images: images,
);
}
}
In this part of the code
if (configFileWithExtension != null) {
final configFileMap = configFileInBase64.firstOrNull;
jsonData[configFileWithExtension] = configFileMap;
}
return jsonData;
}
I have also tried to put
jsonData['configFile'] = configFileMap
but this way it shows 'configfile' both after map entry and for the key.
Can someone help me with this?
Thanks!!
Not sure if I understand but I think you want
jsonData['configFile'] = {configFileWithExtension: configFileMap};
By the way, Dart allows for if
conditions inside the initialisation of the map. You could do this for example:
final jsonData = {
'uuid': uuid ?? '',
'fault': fault?.reportToJson() ?? {},
'location': location?.reportToJson() ?? {},
'mainFailure': mainFailure?.reportToJson() ?? {},
'secondaryFailure': secondaryFailure?.reportToJson() ?? {},
'description': description ?? '',
'distributionChannel': distributionChannel ?? '',
'fuseStatus': fuseStatus ?? '',
'matnr': matnr ?? '',
'sdFile': sdFileInBase64.firstOrNull,
'blackBoxFile': blackBoxFileInBase64.firstOrNull,
'layoutPlantFile': layoutPlantFileInBase64.firstOrNull,
'images': imagesInBase64,
if (configFileWithExtension != null)
'configFile': {configFileWithExtension: configFileInBase64.firstOrNull}
};