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 className = '${camelName}Cubit';
  final stateName = '${camelName}State';
  final snakeName = FileWriter.toSnakeCase(featureName);

  final dependencies = _generateDependencies(functions);
  final constructor = _generateConstructor(className, functions, stateName);
  final methods = _generateMethods(functions, camelName);
  final modelImports = _generateModelImports(functions, '../../data/models');

  final useCaseImportsList =
      functions
          .map(
            (f) =>
                "import '../../domain/use_cases/${FileWriter.toSnakeCase(f.name)}_use_case.dart';",
          )
          .toList()
        ..sort();
  final useCaseImports = useCaseImportsList.join('\n');

  final fetcherImport =
      schema.globalConfig.config['fetcher_import'] ??
      '../../../../core/utils/fetcher.dart';

  // Conditional resource imports: only import the needed base state files
  final needsBaseState = functions.any((f) => !f.pagination);
  final needsBasePagination = functions.any((f) => f.pagination);
  final resourceImportsList = <String>[];
  if (needsBaseState) {
    resourceImportsList.add(
      "import 'package:core/resources/base_state.dart';",
    );
  }
  if (needsBasePagination) {
    resourceImportsList.add(
      "import 'package:core/resources/base_pagination_state.dart';",
    );
  }
  final resourceImports = resourceImportsList.join('\n');

  return '''import 'package:bloc/bloc.dart';
import '$fetcherImport';
$resourceImports
$useCaseImports
$modelImports

part '${snakeName}_state.dart';

class $className extends Cubit<$stateName> {
$dependencies

$constructor

$methods
}
''';
}