🏛️ Flutter Folder Gen CLI

A powerful Dart CLI tool that generates complete, production-ready Flutter project structures for your chosen architecture pattern in seconds.

✨ Supported Patterns

Pattern Description Key packages
MVC Model-View-Controller http, shared_preferences
BLoC Business Logic Component flutter_bloc, equatable
GetX GetX state management get, get_storage
Provider Provider + GoRouter provider, go_router

🚀 Installation

Option 1 — Global activation (pub.dev)

dart pub global activate flutter_folder_gen

Option 2 — From source

git clone https://github.com/yourname/flutter_folder_gen
cd flutter_folder_gen
dart pub global activate --source path .

📖 Usage

flutter_folder_gen --interactive
# or simply:
flutter_folder_gen

Direct flags

# Generate a BLoC project
flutter_folder_gen -p bloc -n my_app

# Generate a GetX project in a specific folder
flutter_folder_gen -p getx -n shop_app -o ./projects

# Generate an MVC project
flutter_folder_gen -p mvc -n todo_app

# Generate a Provider project
flutter_folder_gen -p provider -n weather_app

All options

-p, --pattern     Architecture pattern: mvc | bloc | getx | provider
-n, --name        Project/feature name (snake_case, e.g. my_app)
-o, --output      Output directory (default: current directory)
-i, --interactive Run guided interactive setup
-h, --help        Show help
-v, --version     Show version

📁 Generated Structures

MVC

my_app/
├── lib/
│   ├── core/
│   │   ├── constants/app_constants.dart
│   │   ├── network/api_service.dart
│   │   ├── storage/local_storage.dart
│   │   ├── theme/app_theme.dart
│   │   └── utils/
│   │       ├── extensions.dart
│   │       └── validators.dart
│   ├── models/
│   │   └── user_model.dart
│   ├── views/
│   │   ├── home/
│   │   │   ├── home_view.dart
│   │   │   └── widgets/home_card.dart
│   │   ├── auth/login_view.dart
│   │   └── splash/splash_view.dart
│   ├── controllers/
│   │   ├── base_controller.dart
│   │   ├── home_controller.dart
│   │   └── auth_controller.dart
│   ├── repositories/
│   │   ├── base_repository.dart
│   │   └── user_repository.dart
│   ├── routes/app_routes.dart
│   └── main.dart
├── test/
│   ├── controllers/home_controller_test.dart
│   └── models/user_model_test.dart
├── assets/
│   ├── images/
│   └── icons/
├── pubspec.yaml
├── analysis_options.yaml
└── .gitignore

BLoC (Clean Architecture)

my_app/
├── lib/
│   ├── core/
│   │   ├── constants/
│   │   ├── error/failures.dart
│   │   ├── network/api_service.dart
│   │   ├── theme/
│   │   ├── usecase/usecase.dart
│   │   └── utils/either.dart
│   ├── data/
│   │   ├── datasources/
│   │   │   ├── user_remote_datasource.dart
│   │   │   └── user_local_datasource.dart
│   │   ├── models/user_model.dart
│   │   └── repositories/user_repository_impl.dart
│   ├── domain/
│   │   ├── entities/user_entity.dart
│   │   ├── repositories/user_repository.dart          ← abstract
│   │   └── usecases/get_users_usecase.dart
│   ├── presentation/
│   │   ├── home/
│   │   │   ├── bloc/  (home_bloc, home_event, home_state)
│   │   │   ├── pages/home_page.dart
│   │   │   └── widgets/user_list_tile.dart
│   │   └── auth/
│   │       ├── bloc/  (auth_bloc, auth_event, auth_state)
│   │       └── pages/login_page.dart
│   ├── injection_container.dart
│   ├── routes/app_router.dart
│   └── main.dart
└── test/
    ├── blocs/home_bloc_test.dart
    └── usecases/get_users_usecase_test.dart

GetX

my_app/
├── lib/
│   ├── core/
│   │   ├── constants/
│   │   ├── network/
│   │   ├── storage/storage_service.dart
│   │   ├── theme/
│   │   └── utils/snackbar_utils.dart
│   ├── data/
│   │   ├── models/user_model.dart
│   │   ├── providers/user_provider.dart
│   │   └── repositories/user_repository.dart
│   ├── modules/
│   │   ├── home/
│   │   │   ├── bindings/home_binding.dart
│   │   │   ├── controllers/home_controller.dart
│   │   │   └── views/
│   │   │       ├── home_view.dart
│   │   │       └── widgets/user_card.dart
│   │   ├── auth/
│   │   │   ├── bindings/auth_binding.dart
│   │   │   ├── controllers/auth_controller.dart
│   │   │   └── views/login_view.dart
│   │   └── splash/
│   │       ├── bindings/splash_binding.dart
│   │       ├── controllers/splash_controller.dart
│   │       └── views/splash_view.dart
│   ├── routes/
│   │   ├── app_pages.dart
│   │   └── app_routes.dart
│   └── main.dart

Provider

my_app/
├── lib/
│   ├── core/
│   │   ├── constants/
│   │   ├── network/
│   │   ├── storage/prefs_service.dart
│   │   ├── theme/
│   │   └── utils/extensions.dart
│   ├── models/user_model.dart
│   ├── providers/
│   │   ├── auth_provider.dart
│   │   ├── theme_provider.dart
│   │   └── user_provider.dart
│   ├── repositories/user_repository.dart
│   ├── router/app_router.dart          ← GoRouter with auth redirect
│   ├── screens/
│   │   ├── home/
│   │   │   ├── home_screen.dart
│   │   │   └── widgets/user_list_item.dart
│   │   ├── auth/login_screen.dart
│   │   └── splash/splash_screen.dart
│   ├── app.dart                        ← MultiProvider root
│   └── main.dart
└── test/
    └── providers/user_provider_test.dart

MVVM + Features First Clean Architecture

my_app/
├── lib/
│   ├── core/
│   │   ├── constants/       ← AppConstants, ApiEndpoints
│   │   ├── error/           ← Failures, Exceptions
│   │   ├── network/         ← ApiClient, NetworkInfo
│   │   ├── providers/       ← CoreProviders (Riverpod)
│   │   ├── router/          ← GoRouter with auth redirect
│   │   ├── storage/         ← StorageService
│   │   ├── theme/           ← AppTheme, AppColors, AppTextStyles
│   │   ├── usecase/         ← UseCase base classes
│   │   ├── utils/           ← Either, Extensions, Validators
│   │   └── viewmodel/       ← BaseViewModel
│   └── features/
│       ├── auth/
│       │   ├── data/        ← Models, DataSources, RepoImpl
│       │   ├── domain/      ← Entities, Repository, UseCases
│       │   ├── presentation/← ViewModel, Pages, Widgets
│       │   └── providers/   ← Riverpod providers
│       └── home/
│           ├── data/
│           ├── domain/
│           ├── presentation/
│           └── providers/
└── test/
    └── features/
        ├── auth/            ← ViewModel & UseCase tests
        └── home/            ← ViewModel tests

🔧 After Generation

cd my_app
flutter pub get
flutter run

📄 License

MIT

Libraries