generateCopyWithMethod method
Generate a copyWith
method.
Implementation
void generateCopyWithMethod(
BuildContext ctx, ClassBuilder clazz, LibraryBuilder file) {
clazz.methods.add(Method((method) {
method
..name = 'copyWith'
..returns = ctx.modelClassType;
// Add all `super` params
if (ctx.constructorParameters.isNotEmpty) {
for (var param in ctx.constructorParameters) {
method.requiredParameters.add(Parameter((b) => b
..name = param.name
..type = convertTypeReference(param.type)));
}
}
var buf = StringBuffer('return ${ctx.modelClassName}(');
var i = 0;
for (var param in ctx.constructorParameters) {
if (i++ > 0) buf.write(', ');
buf.write(param.name);
}
// Add named parameters
for (var field in ctx.fields) {
method.optionalParameters.add(Parameter((b) {
b
..name = field.name
..named = true
..type = convertTypeReference(field.type, forceNullable: true);
}));
if (i++ > 0) buf.write(', ');
buf.write('${field.name}: ${field.name} ?? this.${field.name}');
}
buf.write(');');
method.body = Code(buf.toString());
}));
}