createNewFeature method

Future<void> createNewFeature({
  1. required String featureName,
})

Implementation

Future<void> createNewFeature({
  required 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: '$featureName $kFeatureString $kCreated',
    );
  } catch (e) {
    Utility.successPrinter(text: '$kErrorCopyingFolder $e');
  }
}