generateToHiveObject function
String
generateToHiveObject(
- String? hiveObjectName,
- String className,
- List<FormalParameterElement>? instances,
- List<FormalParameterElement>? classFields,
)
Implementation
String generateToHiveObject(
String? hiveObjectName,
String className,
List<FormalParameterElement>? instances,
List<FormalParameterElement>? classFields,
) {
final field = instances
?.map((e) {
final classType = classFields
?.where((cf) => cf.name == e.name)
.first
.type;
final isEnum = classType?.element is EnumElement;
if (isEnum) {
return '${e.name}: instance.${e.name}?.name';
}
if (classType == null || _isPrimitive(classType)) {
// List<XModel> with non-primitive item type — map via toHiveObject().
if (classType != null &&
classType.isDartCoreList &&
classType is ParameterizedType) {
final itemType = classType.typeArguments.first;
if (!_isPrimitive(itemType) && itemType.element is! EnumElement) {
final nullable =
classType.nullabilitySuffix == NullabilitySuffix.question ? '?' : '';
return '${e.name}: instance.${e.name}$nullable.map((item) => item.toHiveObject()).toList()';
}
}
// SC-5 fix: Map<K, XModel> with non-primitive value type — map via toHiveObject().
if (classType != null &&
classType.isDartCoreMap &&
classType is ParameterizedType) {
final valueType = classType.typeArguments.last;
if (!_isPrimitive(valueType) && valueType.element is! EnumElement) {
final nullable =
classType.nullabilitySuffix == NullabilitySuffix.question ? '?' : '';
return '${e.name}: instance.${e.name}$nullable.map((k, v) => MapEntry(k, v.toHiveObject()))';
}
}
return '${e.name}: instance.${e.name}';
}
// Non-primitive, non-list model field
return '${e.name}: instance.${e.name}?.toHiveObject()';
})
.join(",\n");
return """
$hiveObjectName _\$${className}ToHiveObject($className instance) => $hiveObjectName(
$field
);
""";
}