run method
Executes the custom application build process.
This method orchestrates flexible build workflows by processing user-defined configurations and delegating to the Arguments build system for execution:
Build Workflow
- Argument Processing: Parses custom build arguments and global settings
- Configuration Validation: Validates binary type and parameter compatibility
- Build Execution: Delegates to Arguments.build() with custom configuration
- Result Management: Returns build exit code for success/failure indication
Parameters
- Uses
argResults- Custom build argument results from CLI parsing - Uses
globalResults- Global configuration and environment variables
Returns
Returns a Future that completes with:
0- Build completed successfully with specified configuration>0- Build failed with specific error codenull- Build process encountered unexpected termination
Build Flexibility
The execution supports diverse scenarios:
- Binary Types: APK, AAB, IPA, desktop apps, web builds, custom formats
- Build Modes: Debug, profile, release, and custom optimization levels
- Custom Arguments: User-defined flags and parameters for specialized tools
- Output Control: Configurable artifact paths and naming conventions
- Integration: Compatibility with existing build systems and toolchains
Error Handling
Common failure scenarios include:
- Invalid binary type specification or unsupported format
- Incorrect custom arguments or incompatible parameter combinations
- Missing build dependencies or environment configuration issues
- Output path conflicts or insufficient disk space
- Integration failures with external build tools or systems
Example Scenarios
Enterprise iOS Build:
// CLI: flutter distribute build custom --binary-type ipa --flavor enterprise
final result = await command.run();
Multi-Platform Desktop Build:
// CLI: flutter distribute build custom --binary-type macos --arguments "--analyze-size"
final result = await command.run();
Custom Web Build:
// CLI: flutter distribute build custom --binary-type web --build-mode profile
final result = await command.run();
Integration Benefits
The custom command enables:
- Seamless integration with existing CI/CD pipelines
- Support for specialized deployment requirements
- Compatibility with custom build tools and optimization workflows
- Flexible artifact management and post-build processing
- Extensible foundation for future build system enhancements
Implementation
@override
Future? run() => Arguments.fromArgResults(argResults!, globalResults).build();