Introduction
A command-line tool that simplifies auto-code generation. Allowing you to generate a feature, widget, model, and API call code for your Flutter applications.
Features
- Feature code generation (Basic structure with classes)
- Widget code generation
- Model code generation
- GET method API call code generation
- POST method API call code generation
- Assets image generation from 3x to 1x and 2x
Flutter Compatibility
Package version | Dart version | Flutter version | Boilerplate version |
---|---|---|---|
0.0.10 | 3.2.6 | 3.16.0 - 3.19.3 | 3.16.9+1 |
0.0.9 | 3.2.6 | 3.16.0 - 3.19.3 | 3.16.9+1 |
0.0.8 | 3.2.6 | 3.16.0 - 3.19.3 | 3.16.9+1 |
0.0.7 | 3.2.6 | 3.16.0 - 3.19.3 | 3.16.9+1 |
0.0.6 | 3.2.6 | 3.16.0 - 3.19.3 | 3.16.9+1 |
0.0.5 | 3.2.6 | 3.16.0 - 3.19.3 | 3.16.9+1 |
0.0.4 | 3.2.6 | 3.16.0 - 3.19.3 | 3.16.9+1 |
0.0.3 | 3.2.6 | 3.16.0 - 3.19.3 | 3.16.9+1 |
0.0.2 | 3.2.6 | 3.16.0 - 3.19.3 | 3.16.9+1 |
Getting Started
To integrate the package into your Flutter project, follow these steps:
Add Dependency
Add the following dependency to your pubspec.yaml file:
dependencies:
jt_flutter_cli: ^0.0.10
Then run:
flutter pub get
Usage
Create new feature:
flutter pub run jt_flutter_cli create feature {name_of_feature}
In the above configuration, the package is creating a new feature that is available in the lib/feature/name_of_feature path.
It will generate the name_of_feature folder, which has the dart files and the domain, presentation, and data folders as shown below.
.
├── ...
├── name_of_feature
│ ├── data
│ │ ├── data_source
│ │ │ └── name_of_feature_data_source.dart
│ │ │ └── name_of_feature_data_source_impl.dart
│ │ ├── repository
│ │ │ └── name_of_feature_repo_impl.dart
│ │ │ └── mock_name_of_feature_repo_impl.dart
│ ├── domain
│ │ ├── repositories
│ │ │ └── name_of_feature_repo.dart
│ ├── presentation
│ │ ├── bloc
│ │ │ └── name_of_feature_bloc.dart
│ │ │ └── name_of_feature_data_event.dart
│ │ │ └── name_of_feature_data_state.dart
│ │ ├── screen
│ │ │ └── name_of_feature_screen.dart
│ │ └── name_of_feature_page.dart
└── ...
Create new widget:
flutter pub run jt_flutter_cli create widget {name_of_widget}
It will prompt the user with the following question:
- Do you want to create a common widget or a feature widget? (common/feature)
- common: Widget will be created inside the folder lib/core/ui/widgets
- feature: It will prompt the user to enter the feature name, and the widget will be created inside the respective feature's folder at lib/feature/name_of_feature/presentation/screen/widgets
Create new model:
flutter pub run jt_flutter_cli create model {model_name} {feature_name} {json_file_path}
Add GET API call:
flutter pub run jt_flutter_cli Add get-api-call {API_end_point} {API_name}
It will prompt the user with the following questions for GET API call:
-
Enter feature name:
-
Does this API have request query parameters? (Y/N):
- Y : It will ask for json file path
- N : It will skip this question and move to next question
-
Enter request json file path:
-
Does this API have response body? (Y/N):
- Y : It will ask for json file path
- N : It will skip this question and move to next question
-
Enter response json file path:
-
Do you want to add shimmer to this API call? (Y/N):
- Y : It will generate the bloc state for showing shimmer UI in screen
- N : It will generate code to call base bloc event for showing progress indicator UI in dialog with no dismissible dialog
Add POST API call:
flutter pub run jt_flutter_cli Add post-api-call {API_end_point} {API_name}
It will prompt the user with the following questions for POST API call:
-
Enter feature name:
-
Does this API have request body? (Y/N):
- Y : It will ask for json file path
- N : It will skip this question and move to next question
-
Enter request json file path:
-
Does this API have response body? (Y/N):
- Y : It will ask for json file path
- N : It will skip this question and move to next question
-
Enter response json file path:
-
Do you want to add shimmer to this API call? (Y/N):
- Y : It will generate the bloc state for showing shimmer UI in screen
- N : It will generate code to call base bloc event for showing progress indicator UI in dialog with no dismissible dialog
Assets image generation from 3x to 1x and 2x:
flutter pub run jt_flutter_cli create assets {3x image path} {directory name in assets/images/ (This is where image will be saved)}
Follow below instruction to Auto add generated files to git
- Go to Settings->Version control->Confirmation and Select “Add silently” for “When files are created” and also check the “Apply to files created outside of Android Studio”
Rules
Common Rules:
- All the files must contain only one class
- Wherever you use Name or any keyword it must be unique
API Rules:
- The feature must be created using the CLI tool
- The developer must not change any file name of the feature
- The API name must be in lowercase with an underscore (Valid Ex: get_profile, profile)
Multipart API Rules:
- All file parameters keys in request json must be postfix with _file. eg (xyzAbc_file="")
- File parameters value must be empty string. eg (xyzAbc_file="")
Existing project upgrade guide to utilize CLI tool in existing project
Below changes are required to utilize the CLI tool in the existing project
- Upgrade the Flutter version to 3.16.9
- Rename “MasterBloc” to “ApiBaseBloc” and move a file to “core/base/bloc/api_base_bloc/api_base_bloc.dart”
- Rename “MasterApiEvents” to ”ApiBaseBlocEvents” and move a file to “core/base/bloc/api_base_bloc/api_base_bloc_event.dart”
- Rename “MasterApiState” to ”ApiBaseBlocState” and move a file to “core/base/bloc/api_base_bloc/api_base_bloc_state.dart”
- Move “/core/base/widget/base_bloc_widget.dart” to “/core/base/screen/base_bloc_widget.dart”
- Move data_source to core/api
- Move base_api_repo.dart to core/api/repository
- Move /core/domain/commons/entities/api_response.dart to /core/api/model/api_response.dart
- Move /core/domain/commons/entities/no_request.dart to core/api/model/no_request.dart
- Move /core/domain/commons/entities/success.dart to core/api/model/success.dart
- Move /core/data/error/failure.dart to /core/api/model/failure.dart
- Move /core/domain/commons/usecases/usecase.dart to /core/api/base_usecases/base_usecase.dart
- Rename UseCase to BaseUseCase
- Create /core/const/mock_api_constants.dart file and move all const variable to this file from /core/api/data_source/mock/mock_data_impl.dart
- base_bloc change the name of “baseBlocObject” to “apiBaseBlocObject”
- Add “Failure” to ErrorApiEvent as a parameter and
- update the below lines with apiBaseBlocObject.add(ErrorApiEvent(failure: failure));
- baseBlocObject.failureModel = failure;
- baseBlocObject.add(ErrorApiEvent());
- Remove failureModel parameter from ApiBaseBloc and use data from event
- Replace the Success class with the Success class from the boilerplate
- Move /core/util/api_constant.dart to /core/const/api_constants.dart and update the file name api_constants
Note:
- Some features of CLI may require more changes than defined here depending on your project structure and version
Libraries
- command_executor
- core/code/code_handler
- core/const/command_const
- core/const/string_const
- core/package/json_ast/error
- core/package/json_ast/json_ast
- core/package/json_ast/location
- core/package/json_ast/parse
- core/package/json_ast/parse_error_types
- core/package/json_ast/tokenize
- core/package/json_ast/tokenize_error_types
- core/package/json_ast/utils/substring
- core/path/path_handler
- core/util/model_util/helpers
- core/util/model_util/model_generator
- core/util/model_util/syntax
- core/util/util
- core/util/validator_util
- feature/add_api_call/add_api_call_util
- feature/add_api_call/api_call_cli
- feature/add_api_call/usecases/basic_structure_usecase
- feature/create_assets/create_assets_cli
- feature/create_feature/basic_structure/basic_structure_page
- feature/create_feature/basic_structure/data/data_source/basic_structure_data_source
- feature/create_feature/basic_structure/data/data_source/basic_structure_data_source_impl
- feature/create_feature/basic_structure/data/repository/basic_structure_repo_impl
- feature/create_feature/basic_structure/data/repository/mock_basic_structure_repo_impl
- feature/create_feature/basic_structure/domain/repositories/basic_structure_repo
- feature/create_feature/basic_structure/presentation/bloc/basic_structure_bloc
- feature/create_feature/basic_structure/presentation/bloc/basic_structure_event
- feature/create_feature/basic_structure/presentation/bloc/basic_structure_state
- feature/create_feature/basic_structure/presentation/screen/basic_structure_screen
- feature/create_feature/create_feature_cli
- feature/create_model/create_model_cli
- feature/create_widget/basic_widget/basic_widget
- feature/create_widget/create_widget_cli