generate method
Implementation
Future<void> generate(
String featureName,
String providerName, {
bool force = false,
bool dryRun = false,
bool withTests = true,
String? stateManagement,
}) async {
if (featureName.isEmpty || providerName.isEmpty) {
throw Exception('Feature name and provider name are required.');
}
if (!isSnakeCase(featureName) || !isSnakeCase(providerName)) {
throw Exception('Names must be in snake_case.');
}
final sm = stateManagement ?? detectStateManagement();
final useBloc = sm == 'bloc';
final featureDir = getFeatureDir(featureName);
final providersDir = p.join(featureDir, 'presentation', 'providers');
final targetPath = p.join(
providersDir,
useBloc ? '${providerName}_cubit.dart' : '${providerName}_provider.dart',
);
checkFileExists(
targetPath,
useBloc ? 'Cubit "$providerName"' : 'Provider "$providerName"',
force: force,
);
final testDir = p.join(
projectDir,
'test',
'features',
featureName,
'presentation',
'providers',
);
final testPath = p.join(
testDir,
useBloc
? '${providerName}_cubit_test.dart'
: '${providerName}_provider_test.dart',
);
if (dryRun) {
logDryRun(
useBloc
? 'create cubit "$providerName"'
: 'create provider "$providerName"',
targetPath,
);
if (withTests) {
logDryRun(
useBloc
? 'create cubit test "$providerName"'
: 'create provider test "$providerName"',
testPath,
);
}
return;
}
ensureDirectory(providersDir);
final className = toPascalCase(providerName);
await copyTemplate(
templateSubPath: useBloc ? 'cubit' : 'provider',
targetDir: providersDir,
variables: {'provider_name': providerName, 'class_name': className},
);
if (withTests) {
await generateTest(
testTemplateSubPath: useBloc ? 'cubit' : 'provider',
testDir: testDir,
variables: {
'project_name': getProjectName(),
'feature_name': featureName,
'provider_name': providerName,
'class_name': className,
},
);
}
logger.success(
useBloc
? 'Cubit "$providerName" created in feature "$featureName".'
: 'Provider "$providerName" created in feature "$featureName".',
);
}