createNewFeature method

Future<void> createNewFeature(
  1. String featureName
)

Implementation

Future<void> createNewFeature(
  String featureName,
) async {
  String destinationPath = '$kLibFeatures$featureName';

  String sourceFolderPath = Utility.getDirFromCliPackage(
      sourceFolderPath: kCreateFeatureBasicStructure);

  Directory destinationDirectory = Directory(destinationPath);
  if (destinationDirectory.existsSync()) {
    Utility.errorPrinter(text: kErrorChooseDifferentFeatureName);
    return;
  }

  try {
    await Utility.copyFolder(
        sourcePath: sourceFolderPath, destinationPath: destinationPath);
    await Utility.processFiles(
        path: destinationPath,
        substring: kStartComment,
        replacement: kWhitespaces,
        isPascalCase: false);
    await Utility.processFiles(
        path: destinationPath,
        substring: kEndComment,
        replacement: kWhitespaces,
        isPascalCase: false);
    await Utility.renameFilesWithSubstring(
        path: destinationPath,
        substring: kBasicStructureLowerCase,
        newName: featureName);
    await Utility.processFiles(
        path: destinationPath,
        substring: kBasicStructurePascalCase,
        replacement: featureName,
        isPascalCase: true);
    await Utility.processFiles(
        path: destinationPath,
        substring: kBasicStructureLowerCase,
        replacement: featureName.toLowerCase(),
        isPascalCase: false);
    String? name = Utility.getPubspecInfo();
    if (name != null) {
      await Utility.processFiles(
          path: destinationPath,
          substring: kFlutterCleanArchitecture,
          replacement: name,
          isPascalCase: false);
    }

    final nameOfFeature = featureName.toLowerCase();
    String pascalCase = Utility.toPascalCase(input: nameOfFeature);

    await diGetterFileUpdate(
        nameOfFeature: nameOfFeature, pascalCase: pascalCase);

    await mockDiGetterFileUpdate(
        nameOfFeature: nameOfFeature, pascalCase: pascalCase);

    await prodDiGetterFileUpdate(
        nameOfFeature: nameOfFeature, pascalCase: pascalCase);

    await injectionContainerFileUpdate(
        nameOfFeature: nameOfFeature, pascalCase: pascalCase);

    Utility.successPrinter(text: '$kFeatureString $featureName $kCreated');
  } catch (e) {
    print('$kErrorCopyingFolder $e');
  }
}