generate static method

String generate(
  1. FeatureSchema schema
)

Implementation

static String generate(FeatureSchema schema) {
  final featureName = schema.name;
  final functions = schema.functions;
  final camelName = FileWriter.toCamelCase(
    FileWriter.toSnakeCase(featureName),
  );
  final stateName = '${camelName}State';

  final fields = functions
      .map((f) {
        final responseType = ModelGenerator.getResponseModelType(f);
        final baseResponseType = ModelGenerator.getBaseResponseModelType(f);
        final type = f.pagination
            ? 'BasePaginationState<$baseResponseType>'
            : 'BaseState<$responseType>';
        return '  final $type ${f.name}State;';
      })
      .join('\n');

  final constructorParams = functions
      .map((f) => '    required this.${f.name}State,')
      .join('\n');

  final copyWithParams = functions
      .map((f) {
        final responseType = ModelGenerator.getResponseModelType(f);
        final baseResponseType = ModelGenerator.getBaseResponseModelType(f);
        final type = f.pagination
            ? 'BasePaginationState<$baseResponseType>'
            : 'BaseState<$responseType>';
        return '    $type? ${f.name}State,';
      })
      .join('\n');

  final copyWithAssignments = functions
      .map(
        (f) => '      ${f.name}State: ${f.name}State ?? this.${f.name}State,',
      )
      .join('\n');

  final initialFields = functions
      .map((f) {
        final responseType = ModelGenerator.getResponseModelType(f);
        final baseResponseType = ModelGenerator.getBaseResponseModelType(f);
        if (f.pagination) {
          return '      ${f.name}State: BasePaginationState<$baseResponseType>(query: BasePagingQuery()),';
        } else {
          return '      ${f.name}State: BaseState<$responseType>.initial(),';
        }
      })
      .join('\n');

  return '''part of '${FileWriter.toSnakeCase(featureName)}_cubit.dart';


class $stateName {
$fields

$stateName({
$constructorParams
});

$stateName copyWith({
$copyWithParams
}) {
  return $stateName(
$copyWithAssignments
  );
}

factory $stateName.initial() {
  return $stateName(
$initialFields
  );
}
}
''';
}