ClassSpecTweenBuilder function
Implementation
Class ClassSpecTweenBuilder(SpecDefinitionContext context) {
final specClassName = context.options.specClassName;
return Class((builder) {
builder.docs.addAll([
'/// A tween that interpolates between two [$specClassName] instances.',
'///',
'/// This class can be used in animations to smoothly transition between',
'/// different [$specClassName] specifications.',
]);
builder.name = '${specClassName}Tween';
builder.extend = refer('Tween<$specClassName?>');
final constructorParams = [
Parameter((b) {
b.name = 'super.begin';
b.named = true;
}),
Parameter((b) {
b.name = 'super.end';
b.named = true;
}),
];
// Constructor
builder.constructors.add(
Constructor((builder) {
builder.optionalParameters.addAll(constructorParams);
}),
);
// lerp method
builder.methods.add(Method((b) {
b.name = 'lerp';
b.annotations.add(refer('override'));
b.returns = refer(specClassName);
b.requiredParameters.add(Parameter((b) {
b.name = 't';
b.type = refer('double');
}));
b.body = Code('''
if (begin == null && end == null) return const $specClassName();
if (begin == null) return end!;
return begin!.lerp(end!, t);
''');
}));
});
}