generateFeature function
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 🚀
''');
}