Jatis Flutter Generator
A comprehensive VS Code extension for generating Flutter presentations, dependencies, and services following Jatis standardization. Built with consistent architecture patterns, complete unit testing, and flexible configuration options to ensure team-wide development consistency.
Features
🚀 Flutter Project Creation
- Complete Flutter project setup with automatic platform configuration
- Platform detection and enabling - automatically enables disabled platforms (web, windows, linux, macos)
- Comprehensive multi-platform creation including Android, iOS, Web, Windows, macOS, and Linux by default
- Automatic project opening after successful creation
- Flutter installation validation before project creation
- Streamlined workflow with just project name input
🏗️ Presentation Generation
- Generate complete Flutter presentations with consistent architecture patterns
- Creates organized folder structure:
constants, controller, service, model, view
- Additional controller functions with custom input prompt (e.g., getUserData, updateProfile)
- Automatic test generation for all components including additional functions
- Generates clean, maintainable code following best practices
🔧 Dependency Management
- Generate dependency classes with reusable components
- Additional dependency functions with custom input prompt (e.g., initialize, configure, cleanup)
- Automatic dependency test generation for reliable code including additional functions
- Organized code structure with clear separation
📋 Model Generation from JSON
- Generate Dart models from JSON with automatic type detection and conversion
- Nested model support - automatically creates separate model files for nested objects
- Plural-to-singular conversion - converts array names like
users → User model
- Smart type mapping - generates proper Dart types (
List<User>, String, int, etc.)
- Directory selection - choose target directory within lib/ folder with history tracking
- JSON validation - real-time validation with preview before generation
- Comprehensive model methods - fromJson, toJson, toString, and proper constructors
⚙️ Service Generation
- Generate standalone service classes with interface-implementation pattern
- Additional service functions with custom input prompt (e.g., authenticate, refreshToken, logout)
- Configurable service paths for organized code structure
- Automatic service test generation with comprehensive test setup including additional functions
- Clean separation between business logic and presentation layer
- Automated test file generation for all presentations, dependencies, and services
- Testing framework setup with automatic mock generation
- Build runner support with easy directory selection
- Test coverage reports to ensure code quality
- GetX state management package installation and configuration
- History tracking for recently used directories and files
🌐 Network, Navigation & Security Layers
- Complete Dio-based HTTP client with SOLID principles and clean architecture
- Automatic layer generation when creating Flutter projects
- Multi-service support with API client factory for different base URLs
- Comprehensive error handling with typed exceptions (Network, Timeout, Server, Certificate, Serialization)
- Request/response logging with built-in logging interceptor
- SSL certificate pinning for enhanced security
- Platform-adaptive HTTP adapter with conditional imports (io/web)
- GoRouter navigation with RouterConfigProvider pattern, AppRouter for route definitions
- Security service with jailbreak/root detection, developer mode check
- App info service for app version retrieval via package_info_plus
- Flavor system integration for environment-specific base URLs
- GetX dependency injection with automatic AppBinding registration
- Generic type support for automatic JSON serialization/deserialization
- Geolocation service wrapping
geolocator — current position, last known position, position stream, permissions, distance/bearing calculations
- Biometric service wrapping
local_auth — fingerprint/face authentication, device support checks, available biometrics
- Permission service wrapping
permission_handler — photo/storage permission requests
- Gallery service wrapping
image_gallery_saver_plus — save media files to device gallery
- Download service with Dio-based client — download files to temp, save to gallery, share files via
SharePlus
- Camera re-export for
jatis_camera private package
- Filename sanitization built into download service
- Automatic AppBinding registration for all services
- Configurable timeouts and custom headers support
🔒 Secure Storage Generation
- Complete Secure Storage Service using
flutter_secure_storage
- Automatic storage layer generation when creating Flutter projects
- Unified service implementation in
secure_storage_service.dart
- Centralized keys management via
StorageKeys abstract class
- Comprehensive error handling with
SecureStorageException
- Automatic AppBinding registration for dependency injection
- Full unit test coverage including key verification
⚙️ Configuration Management
- Flexible path configuration to organize your project structure
- Easy setup with user-friendly configuration options
- Clean import paths in generated code
- Package version management for testing and build tools
- Project-level settings with simple setup interface
Installation
- Install from VS Code Marketplace: Jatis Flutter Generator
- Or install manually:
code --install-extension hakanon.jatis-flutter-generator
Usage
Create Flutter Project
- Right-click on any folder in Explorer or use Command Palette
- Select "Create Flutter Project" from context menu
- Enter project name (follows Flutter naming conventions)
- Select target platforms (default: android,ios)
- Supports: android, ios, web, windows, macos, linux
- Extension automatically enables disabled platforms
- Project is created and automatically opened in VS Code
Example Project Creation:
Input: my_flutter_app
Platforms: web,windows,linux
Result:
✓ Enables Flutter platforms (if disabled): web, windows, linux
✓ Creates project with platform directories:
- android/
- ios/
- web/
- windows/
- linux/
✓ Automatically opens the new project
Included Network Layer:
The generated project includes a complete network layer at lib/base/network/:
lib/base/network/
├── adapter_helper/
│ ├── adapter_helper.dart # Platform adapter stub
│ ├── adapter_helper_io.dart # Native adapter (no-op)
│ └── adapter_helper_web.dart # Web adapter (BrowserHttpClient)
├── api_client_interface.dart # HTTP client contract
├── dio_api_client.dart # Dio implementation with factory
├── dio_factory_interface.dart # DioFactory abstraction
├── dio_factory.dart # Dio creation (SSL, adapter, interceptor)
├── api_client_config.dart # Configuration with copyWith & withCredentials
├── api_client_factory.dart # Multi-service registry
├── api_client_exception.dart # Typed exceptions
├── certificate_validator.dart # SSL pinning (SHA-256)
└── interceptors/
└── logging_interceptor.dart # Request/response logging
test/base/network/
├── adapter_helper/
│ └── adapter_helper_test.dart
├── dio_api_client_test.dart
├── api_client_factory_test.dart
├── api_client_config_test.dart
├── api_client_exception_test.dart
└── interceptors/
└── logging_interceptor_test.dart
The API client is automatically registered in lib/base/binding/app_binding.dart and integrated with the flavor system for environment-specific base URLs.
Included Navigation Layer:
lib/base/navigation/
├── app_router.dart # Route definitions (GoRouter)
├── app_routes.dart # Route constants
├── navigation_service.dart # Navigation methods
└── router_config_provider.dart # Router config interface
test/base/navigation/
└── navigation_service_test.dart
Included Security Layer:
lib/base/security/
└── security_service.dart # Jailbreak & dev mode detection
test/base/security/
└── security_service_test.dart
Included App Info Layer:
lib/base/app_info/
└── app_info_service.dart # App version retrieval
test/base/app_info/
└── app_info_service_test.dart
Included Storage Layer:
The generated project includes a secure storage layer at lib/base/storage/:
lib/base/storage/
├── secure_storage_service.dart # Implementation, Interface, and Exceptions
└── storage_keys.dart # Centralized storage keys
test/base/storage/
├── secure_storage_service_test.dart # Service tests
└── storage_keys_test.dart # Key verification tests
The storage service is automatically registered in lib/base/binding/app_binding.dart as StorageServiceInterface.
Included Geolocation Layer:
lib/base/geolocation/
└── geolocation_service.dart # Geolocator wrapper
test/base/geolocation/
└── geolocation_service_test.dart # FakeGeolocatorPlatform tests
Included Biometric Layer:
lib/base/biometric/
└── biometric_service.dart # LocalAuthentication wrapper
test/base/biometric/
└── biometric_service_test.dart # MockLocalAuthentication tests
Included Permission Layer:
lib/base/permission/
└── permission_service.dart # Permission handler wrapper
test/base/permission/
└── permission_service_test.dart # FakePermissionHandler tests
Included Gallery Layer:
lib/base/gallery/
└── gallery_service.dart # Image gallery saver wrapper
test/base/gallery/
└── gallery_service_test.dart # MethodChannel mock tests
Included Download Layer:
lib/base/download/
├── download_client.dart # Abstract client + exception
├── dio_download_client.dart # Dio-based download implementation
└── download_service.dart # Download, save to gallery, share
test/base/download/
├── download_client_test.dart
├── dio_download_client_test.dart
└── download_service_test.dart
Included Camera Layer:
lib/base/camera/
└── camera.dart # jatis_camera re-export (private package)
Included CI/CD:
Jenkinsfile # infra-shared-library pipeline
Generate Presentation
- Right-click on any folder in Explorer
- Select "Generate Presentation" from context menu
- Enter presentation name (e.g.,
user_profile, payment)
- Presentation and tests are automatically created
Generated Structure:
lib/presentation/user_profile/ # Configurable: lib/{moduleSubpath}/
├── constants/user_profile_constant.dart
├── controller/
│ ├── user_profile_controller.dart
│ └── user_profile_binding.dart
├── model/user_profile_viewmodel.dart
├── service/user_profile_service.dart
└── view/user_profile_page.dart
test/presentation/user_profile/ # Configurable: test/{testSubpath}/
├── constants/user_profile_constant_test.dart
├── controller/
│ ├── user_profile_controller_test.dart
│ └── user_profile_binding_test.dart
├── model/user_profile_viewmodel_test.dart
└── service/user_profile_service_test.dart
Generate Dependencies
- Right-click on any folder in Explorer
- Select "Generate Dependencies" from context menu
- Enter dependency name (e.g.,
database, api_client)
- Dependency class and tests are automatically created
Generated Structure:
lib/base/dependencies/database/ # Configurable: lib/{dependenciesSubpath}/
└── database.dart
test/dependencies/database/ # Configurable: test/{dependenciesTestSubpath}/
└── database_test.dart
Generate Service
- Right-click on any folder in Explorer
- Select "Generate Service" from context menu
- Enter service name (e.g.,
auth, payment, notification)
- Service class and tests are automatically created
Generated Structure:
lib/services/auth/ # Configurable: lib/{serviceSubpath}/
└── auth_service.dart
test/services/auth/ # Configurable: test/{serviceTestSubpath}/
└── auth_service_test.dart
Create Model from JSON
- Right-click on any folder in Explorer or use Command Palette
- Select "Create Model from JSON" from context menu
- Choose target directory within lib/ folder (with search and history)
- Enter model name (e.g.,
User, ApiResponse, ProductData)
- Input JSON data - extension validates and shows preview
- Models are automatically generated with nested support
Example JSON Input:
{
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"hair": {
"color": "brown",
"length": "short"
},
"users": [
{
"name": "Alice",
"age": 25
}
]
}
Generated Structure:
lib/models/ # Your selected directory
├── api_response.dart # Main model
├── hair.dart # Nested object model
└── user.dart # Array element model (users → User)
Generated Model Features:
- Proper Dart types (
int, String, List<User>, etc.)
- Required/optional parameters based on nullable analysis
fromJson() and toJson() methods with proper type conversion
toString() method for debugging
- Null-safe constructor with proper parameter handling
Build Runner Operations
- Install Build Runner: Automatically installs build_runner package
- Run Build Runner: Execute for entire project or specific directories
- Directory Selection: Choose specific folders to build with history tracking
Package Management
- Install Packages: Choose from Mockito, Build Runner, or GetX packages with automatic installation
- Run Test Coverage: Execute tests with coverage reports
- Directory-specific Testing: Run tests for specific modules or the entire project
Commands
Access via Command Palette (Ctrl+Shift+P / Cmd+Shift+P):
Jatis: Create Flutter Project - Create new Flutter project with platform configuration
Jatis: Generate Presentation - Create new Flutter presentation module
Jatis: Generate Dependencies - Create dependency classes
Jatis: Generate Service - Create standalone service classes
Jatis: Create Model from JSON - Generate Dart models from JSON input with nested support
Jatis: Install Packages - Install Mockito, Build Runner, or GetX packages
Jatis: Run Build Runner - Execute build runner with options
Jatis: Run Unit Test with Coverage - Execute test coverage
Jatis: Configuration - Open settings panel
Configuration
Configure the extension via VS Code Settings or the built-in Configuration UI.
Path Configuration
The extension uses a flexible path system with absolute roots and configurable subpaths:
| Setting |
Default Value |
Description |
jatis.baseModuleSubpath |
presentation |
Subpath under lib/ for presentation generation |
jatis.baseTestSubpath |
presentation |
Subpath under test/ for presentation tests |
jatis.baseDependenciesSubpath |
base/dependencies |
Subpath under lib/ for dependencies |
jatis.baseDependenciesTestSubpath |
dependencies |
Subpath under test/ for dependency tests |
jatis.baseServiceSubpath |
services |
Subpath under lib/ for service generation |
jatis.baseServiceTestSubpath |
services |
Subpath under test/ for service tests |
jatis.mockitoVersion |
^5.6.4 |
Mockito package version |
jatis.buildRunnerVersion |
^2.15.0 |
Build runner package version |
jatis.getVersion |
^4.7.3 |
Get (GetX) package version |
jatis.flavorizrVersion |
^2.4.2 |
Flavorizr package version |
Requirements
- Flutter SDK 3.0.0 or higher
- Dart SDK 2.17.0 or higher
- VS Code 1.102.0 or higher
This extension is fully cross-platform compatible and has been tested on Windows, macOS, and Linux.
Release Notes
See CHANGELOG.md for full release history and details.
Happy Flutter Development! 🚀