generateFeature function

Future<void> generateFeature(
  1. String name,
  2. ArchGenConfig config
)

Implementation

Future<void> generateFeature(String name, ArchGenConfig config) async {
  if (config.stateManagement == 'bloc') {
    ensureDependencies(['flutter_bloc', 'equatable']);
  } else if (config.stateManagement == 'riverpod') {
    ensureDependencies(['flutter_riverpod']);
  } else if (config.stateManagement == 'getx') {
    ensureDependencies(['get']);
  }
  if (config.stateManagement == 'cubit') {
    ensureDependencies(['flutter_bloc', 'equatable']);
  }

  ensureDependencies(['dartz', 'get_it', 'http']);

  generateCore();
  generateDI();

  final feature = toPascalCase(name);
  final snake = name.toLowerCase();

  final base = 'lib/features/$snake';

  final dirs = [
    '$base/data/models',
    '$base/data/datasources',
    '$base/data/repositories_impl',
    '$base/domain/entities',
    '$base/domain/repositories',
    '$base/domain/usecases',
    '$base/presentation/screens',
    '$base/presentation/widgets',
  ];

  if (config.stateManagement == 'bloc') {
    dirs.add('$base/presentation/bloc');
  } else if (config.stateManagement == 'riverpod') {
    dirs.add('$base/presentation/providers');
  }
  if (config.stateManagement == 'cubit') {
    dirs.add('$base/presentation/cubit');
  }
  for (var dir in dirs) {
    Directory(dir).createSync(recursive: true);
  }

  if (config.stateManagement == 'bloc') {
    _generateBloc(base, feature, snake, config);
    print("📦 Generated BLoC files");
  } else if (config.stateManagement == 'riverpod') {
    _generateRiverpod(base, feature, snake, config);
    print("📦 Generated Riverpod files");
  } else if (config.stateManagement == 'getx') {
    _generateGetX(base, feature, snake, config);
    print("📦 Generated GetX files");
  } else if (config.stateManagement == 'cubit') {
    _generateCubit(base, feature, snake, config);
    print("📦 Generated Cubit files");
  }

  _generateScreen(base, feature, snake, config);
  _generateEntity(base, feature, snake);
  _generateModel(base, feature, snake);
  _generateRepository(base, feature, snake);
  _generateDatasource(base, feature, snake);
  _generateRepositoryImpl(base, feature, snake);
  _generateUsecase(base, feature, snake);

  registerFeatureDI(feature, snake, stateManagement: config.stateManagement);

  print('''
✅ Feature '$name' generated using ${config.stateManagement}

🙏 If this tool helped you, please consider:
⭐ Giving feedback: https://github.com/Fahadbinfayaz96/fd_arch_gen/issues
📦 Leaving a like on pub.dev

Your feedback helps improve the tool 🚀
''');
}