generateRepository method
Generates repository interface and implementation following Clean Architecture.
name
- The name of the repository to generate (e.g., 'user', 'auth').
Creates both abstract repository interface and concrete implementation:
- Abstract repository in
lib/shared/repositories/
(domain layer) - Concrete implementation in
lib/shared/repositories/implementations/
(data layer) - Proper dependency inversion with interface segregation
- Error handling and type safety
- Remote data source integration patterns
Example:
await fileGenerator.generateRepository('user');
// Creates:
// lib/shared/repositories/user_repository.dart
// lib/shared/repositories/implementations/user_repository_impl.dart
Implementation
Future<void> generateRepository(String name) async {
final snakeName = templateGenerator.toSnakeCase(name);
// For standalone repository generation, we'll put it in shared folders
await ensureDirectoryExists('lib/shared/repositories');
await ensureDirectoryExists('lib/shared/repositories/implementations');
final files = {
'lib/shared/repositories/${snakeName}_repository.dart':
templateGenerator.generateRepositoryInterface(name),
'lib/shared/repositories/implementations/${snakeName}_repository_impl.dart':
templateGenerator.generateRepositoryImplementation(name),
};
for (final entry in files.entries) {
await writeFile(entry.key, entry.value);
}
print('✅ Generated repository "$name" with files:');
for (final filePath in files.keys) {
print(' - $filePath');
}
print('💡 Note: Repository generated in shared folder. For feature-specific repositories, use "flx gen feature <name>"');
}