๐Ÿ› ๏ธ flutter_feature_gen

A simple Dart CLI tool to instantly scaffold Clean Architecture feature folders in your Flutter project.

Save time, stay consistent, and generate complete feature modules with one command!


๐Ÿš€ Installation

Install it globally via pub.dev:

dart pub global activate flutter_feature_gen

Make sure Dart's pub global bin is in your PATH (usually ~/.pub-cache/bin).
If not, add this to your .bashrc / .zshrc:

export PATH="$HOME/.pub-cache/bin:$PATH"

โœ… Usage

flutter_feature_gen <feature_name> [state_management] [options]

State Management Options

  • --riverpod - Riverpod Notifier
  • --bloc - Bloc pattern (Event + State + Bloc)
  • --cubit - Cubit pattern (simplified Bloc)

Feature Options

  • --freezed - Use Freezed for immutable models and state classes
  • --test - Generate comprehensive test files

๐Ÿ—๏ธ Generated Structure

lib/features/your_feature/
โ”œโ”€โ”€ data/
โ”‚   โ”œโ”€โ”€ datasources/
โ”‚   โ”‚   โ”œโ”€โ”€ your_feature_remote_datasource.dart
โ”‚   โ”‚   โ”œโ”€โ”€ your_feature_remote_datasource_impl.dart
โ”‚   โ”‚   โ”œโ”€โ”€ your_feature_local_datasource.dart
โ”‚   โ”‚   โ””โ”€โ”€ your_feature_local_datasource_impl.dart
โ”‚   โ”œโ”€โ”€ models/
โ”‚   โ”‚   โ””โ”€โ”€ your_feature_model.dart
โ”‚   โ””โ”€โ”€ repositories/
โ”‚       โ””โ”€โ”€ your_feature_repository_impl.dart
โ”œโ”€โ”€ domain/
โ”‚   โ”œโ”€โ”€ entities/
โ”‚   โ”‚   โ””โ”€โ”€ your_feature_entity.dart
โ”‚   โ”œโ”€โ”€ repositories/
โ”‚   โ”‚   โ””โ”€โ”€ your_feature_repository.dart
โ”‚   โ””โ”€โ”€ usecases/
โ”‚       โ””โ”€โ”€ get_your_feature_usecase.dart
โ””โ”€โ”€ presentation/
    โ”œโ”€โ”€ controller/
    โ”‚   โ””โ”€โ”€ [state_management_files]
    โ”œโ”€โ”€ screens/
    โ”‚   โ””โ”€โ”€ your_feature_screen.dart
    โ””โ”€โ”€ widgets/
        โ””โ”€โ”€ your_feature_card.dart

Each folder includes boilerplate Dart files (models, repositories, use cases, screens, widgets, etc.).

๐Ÿง  Smart Naming

  • Converts meal-plan, meal_plan, or Meal Plan โ†’ MealPlanModel, MealPlanRepository, etc.
  • Folder: lib/features/meal_plan/
  • Class Names: MealPlanScreen, MealPlanModel, etc.

๐Ÿ’ก Example

Social Media App Features

# User feed with advanced state management
flutter_feature_gen "Social Feed" --riverpod --freezed --test

# Profile management
flutter_feature_gen "User Profile" --bloc --test

# Chat system
flutter_feature_gen "Chat" --cubit --freezed

Creates:

  • lib/features/chat/
  • chat_model.dart
  • chat_repository.dart
  • chat_screen.dart
  • And more...

โšก Optional: Use cf as Shortcut

Add this to your .zshrc or .bashrc:

alias cf='flutter_feature_gen'

Then use:

cf workout_tracker

๐Ÿงช Test Generation

When using --test, the script generates:

  • Unit Tests: For all business logic components
  • Widget Tests: For UI components
  • Integration Tests: For complete workflows
  • Mock Classes: Using Mocktail for clean testing

Example test structure:

test/features/your_feature/
โ”œโ”€โ”€ data/
โ”‚   โ”œโ”€โ”€ datasources/
โ”‚   โ”œโ”€โ”€ models/
โ”‚   โ””โ”€โ”€ repositories/
โ”œโ”€โ”€ domain/
โ”‚   โ”œโ”€โ”€ entities/
โ”‚   โ”œโ”€โ”€ repositories/
โ”‚   โ””โ”€โ”€ usecases/
โ””โ”€โ”€ presentation/
    โ”œโ”€โ”€ controller/
    โ”œโ”€โ”€ screens/
    โ””โ”€โ”€ widgets/

๐Ÿ“ฆ Dependencies

The script automatically adds the required dependencies based on your choices:

Core Dependencies

dependencies:
  dio: ^5.3.2
  flutter_riverpod:   # if --riverpod
  flutter_bloc:       # if --bloc or --cubit
  freezed_annotation: # if --freezed
  json_annotation: 

Dev Dependencies

dev_dependencies:
  flutter_test:
    sdk: flutter
  mocktail: 
  bloc_test:           # if --bloc or --cubit
  build_runner:        # if using Freezed
  freezed:             # if --freezed
  json_serializable: 

๐Ÿ”ง Advanced Usage

Custom Feature Names

The script intelligently handles various naming conventions:

cf "user profile"      # โ†’ user_profile (snake_case files)
cf "UserProfile"       # โ†’ user_profile (snake_case files)  
cf "User-Profile"      # โ†’ user_profile (snake_case files)
cf "User Profile API"  # โ†’ user_profile_api (handles multiple words)

Build Runner Integration

For Freezed-based features, don't forget to run:

dart dart run build_runner build --delete-conflicting-outputs

๐ŸŽจ Customization

The script generates production-ready code with:

  • โœ… Proper error handling
  • โœ… Type safety
  • โœ… Null safety compliance
  • โœ… Clean separation of concerns
  • โœ… Testable architecture
  • โœ… Industry best practices

๐Ÿค Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

๐Ÿ“„ License

MIT License ยฉ 2025 Jamal Sfenjeh

๐Ÿ™ Acknowledgments

  • Inspired by Clean Architecture principles by Robert C. Martin
  • Flutter community best practices
  • Modern state management patterns

๐Ÿ› Issues & Support

Found a bug or have a feature request? Please open an issue.


Made with โค๏ธ for the Flutter community

โญ Star this repo if it helped you!