writeFromMapFunc method
String
writeFromMapFunc(
- ClassElement e
)
Implementation
String writeFromMapFunc(ClassElement e) {
final buf = StringBuffer();
buf.writeln('${e.name} $fromMapFuncName(snapshot, _) => $className(');
for (final field in e.constructors.first.parameters) {
String fieldName = camelToSnake(field.name);
String fieldGetterVar = 'snapshot["$fieldName"]';
if (field.metadata.isNotEmpty) {
final annotation = field.metadata.first;
final annotationElement = annotation.element!;
fieldGetterVar = 'snapshot["$fieldName"]';
if (annotationElement.displayName == 'ReferenceList') {
final className = annotation.computeConstantValue()!.getField('className')!.toStringValue();
fieldGetterVar = """(snapshot['$fieldName'] as List).cast<DocumentReference>()
.map<${className}Ref>((unit) {
return unit.withConverter<$className>(
toFirestore: _\$${className}ToFirestore,
fromFirestore: _\$${className}FromFirestore,
);
}).toList()""";
} else if (annotation.element!.displayName == 'Reference') {
var dartObject = annotation.computeConstantValue()!;
final canBeNull = dartObject.getField('canBeNull')!.toBoolValue()!;
final className = dartObject.getField('className')!.toStringValue();
fieldGetterVar =
"""(snapshot['$fieldName'] as DocumentReference${canBeNull ? '?' : ''})${canBeNull ? '?' : ''}.withConverter<$className>(
toFirestore: _\$${className}ToFirestore,
fromFirestore: _\$${className}FromFirestore,
)""";
}
}
if (field.isNamed) {
buf.writeln('${field.name}: $fieldGetterVar,');
} else {
buf.writeln('$fieldGetterVar,');
}
}
buf.writeln(');');
return buf.toString();
}