generate static method
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
}
''';
}