makeBloc function
Implementation
Future<void> makeBloc(
String domain,
String? name,
String? apiPath, {
String? writeDir,
}) async {
final bool isEmptyName = name == null || name.trim().isEmpty;
name = isEmptyName ? domain : name;
final String nameSnake = name.snakeCase;
final String domainSnake = domain.snakeCase;
final String commonFileName = isEmptyName
? domainSnake
: '${domainSnake}_$nameSnake';
final String commonClassName = commonFileName.pascalCase;
final Map<String, String> data = {
'name': name,
'Name': name.pascalCase,
'name_': nameSnake,
'domain': domain,
'Domain': domain.pascalCase,
'domain_': domainSnake,
'common_file_name': commonFileName,
'CommonFileName': commonClassName,
};
final bloc = _renderTemplate(_blocTemplate, data);
final event = _renderTemplate(_eventTemplate, data);
final state = _renderTemplate(_stateTemplate, data);
String effectiveWriteDir =
writeDir ?? p.join('lib', 'features', domain, 'presentation', 'bloc');
// Support template variables in custom writeDir
if (writeDir != null) {
effectiveWriteDir = replaceDomainKey(writeDir, domain);
}
Directory(effectiveWriteDir).createSync(recursive: true);
final blocPath = p.join(effectiveWriteDir, '${commonFileName}_bloc.dart');
final eventPath = p.join(effectiveWriteDir, '${commonFileName}_event.dart');
final statePath = p.join(effectiveWriteDir, '${commonFileName}_state.dart');
// check exists
bool hasGenerated = false;
if (!File(blocPath).existsSync()) {
File(blocPath).writeAsStringSync(bloc);
printSuccess('Generated: $blocPath');
hasGenerated = true;
}
if (!File(eventPath).existsSync()) {
File(eventPath).writeAsStringSync(event);
printSuccess('Generated: $eventPath');
hasGenerated = true;
}
if (!File(statePath).existsSync()) {
File(statePath).writeAsStringSync(state);
printSuccess('Generated: $statePath');
hasGenerated = true;
}
if (apiPath != null && apiPath.trim().isNotEmpty) {
printInfo('\napiPath provided. Adding events from $apiPath...');
await addEvent(
domain,
isEmptyName ? null : name,
null,
apiPath,
null,
writeDir: effectiveWriteDir,
);
// printSuccess('Finished adding events from apiPath: $apiPath .');
} else {
if (hasGenerated) {
runBuildRunner(effectiveWriteDir);
runDartFormat(effectiveWriteDir);
} else {
printWarning("Done. No Changes");
}
}
}