makeBloc function

Future<void> makeBloc(
  1. String domain,
  2. String? name,
  3. String? apiPath, {
  4. String? writeDir,
})

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");
    }
  }
}