ClassSpecBuilder function

Class ClassSpecBuilder(
  1. SpecDefinitionContext context
)

Implementation

Class ClassSpecBuilder(SpecDefinitionContext context) {
  final specRef = MixTypes.spec.symbol!;

  final specClassName = context.options.specClassName;
  final fields = context.options.fields;

  return Class((b) {
    b.name = specClassName;
    b.extend = refer('$specRef<$specClassName>');
    b.docs.addAll([
      '/// A specification that defines the visual properties of $specClassName.',
      '///',
      '/// To retrieve an instance of [$specClassName], use the [$specClassName.of] method with a',
      '/// [BuildContext], or the [$specClassName.from] method with [MixData]',
    ]);

    b.fields.addAll(fields.classFields);

    b.constructors.add(
      Constructor((builder) {
        builder.constant = true;
        builder.optionalParameters.addAll(fields.constructorParams);
        builder.docs.addAll([
          '/// Creates a [$specClassName] with the given fields',
          '///',
          '// All parameters are optional',
        ]);
      }),
    );

    b.methods.addAll([
      StaticMethodOfBuilder(className: specClassName),
      StaticMethodFromBuilder(className: specClassName),
      MethodCopyWithBuilder(className: specClassName, fields: fields),
      MethodLerpBuilder(
        className: specClassName,
        fields: fields,
        emitter: _emitter,
      ),
      GetterPropsBuilder(className: specClassName, fields: fields),
    ]);
  });
}