flutter_folder_gen 1.1.2
flutter_folder_gen: ^1.1.2 copied to clipboard
A CLI tool to generate complete Flutter project structures for MVC, BLoC, GetX, and Provider patterns.
🏛️ Flutter Architect 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 #
Interactive mode (recommended for first-timers) #
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
🔧 After Generation #
cd my_app
flutter pub get
flutter run
🤝 Contributing #
Pull requests welcome! To add a new architecture pattern:
- Create
lib/src/generators/your_pattern_generator.dart - Extend
BaseGenerator - Register it in
cli_runner.dart - Add to
pubspec.yamlexecutables section
📄 License #
MIT